2016-08-02 6 views
0

내 Yii2에는 테이블과 관계 설정이 있습니다. 테이블의동일한 데이터를 표시하는 격자보기의 Yii2 foreach 루프

목록 :

  • 사용자 테이블 -> 외래 키는 다음과 같습니다 COMPANY_ID.
  • Facility_table -> 외래 키 : company_id.
  • Area_table -> 외래 키 : facility_id.
  • productinestable -> 외래 키 : product_id 및 area_id
  • producttable ->이 differnet foreign key가 있습니다.이 질문과 관련이 없습니다.

이제이 사용자에게 속한 제품이있는 사용자를 표시하고 싶습니다. 나는 그것을 할 수있다.

Productlines 테이블에는 internal_code라는 필드가 있습니다. 제품 인덱스 페이지의 area_d를 기준으로이 내부 코드를 표시하려고합니다.

데이터를 순환하여 내부 코드를 표시하면 첫 번째 internal_code가 사용되고 나머지 internal_code는 동일한 데이터가 표시됩니다.

내 코드는 다음과 같습니다. 내 product.php 인덱스 페이지 격자에서 모델

public function getFacilitiesID() 
    { 
     $ids = []; 
     $facilityID = Facility::find()->where(['company_id' => \Yii::$app->user->identity->company_id])->all(); 

     foreach ($facilityID as $facID){ 
      $ids[] = $facID->facility_id; 
     } 

     return $ids; 
    } 

    public function getAreaID() 
    { 
     $ids = []; 

     $areaID = Area::find()->where(['facility_id' => $this->getFacilitiesID()])->all(); 

     foreach ($areaID as $arID){ 
      $ids[] = $arID->area_id; 
     } 

     return $ids; 
    } 


    public function getInternalCode() 
    { 
     $ids = []; 

     $internalCode = Productlines::find()->where(['area_id' => $this->getAreaID()])->all(); 
     foreach ($internalCode as $intCode){ 
      $ids[] = $intCode; 

     } 
     var_dump($ids); exit(); 
     return $ids; 
    } 
public function listen() 
    { 
     $model = $this->getInternalCode(); 

     // var_dump($mod->getIntern $mod->getInternalCode(); 
     $provider = new \yii\data\ArrayDataProvider([ 
      'allModels' => $model, 
      'pagination' => [ 
       'pageSize' => 10, 
       ], 

     ]); 
     return $provider->getModels(); 
    } 

내 코드를 볼 수있는

은 다음과 같습니다

[ 
     'label' => 'Internal Code', 
     'format' => 'raw', 
     'value' => function ($data) { 
      $img =''; 
      foreach ($data->listen() as $key){ 
       $img = $img.$key->internal_code; 
      } 
      return $img; 
     } 


     ], 

사람은 findout 수 무슨 해결책?

getInternalCode() 함수를 var_dump하면 예상대로 표시되지만 그리드보기에서는 적절히 표시되지 않습니다.

+0

"적절히 표시하지 않음"이란 의미는 무엇입니까? 잘못된 데이터입니까? 빈? Charset? – Clyff

+0

제품 라인 테이블에 두 개의 internal_code fireld가 있습니다 ... 두 개의 외래 키 .. product_id와 area_id ... 예를 들어 제품 라인 테이블의 5 개의 다른 열에 대해 product_id를 1로 가질 수 있습니다. 동일한 product_id 다른 area_id를 갖습니다. 이제 internal_code를 얻으려고 시도 할 때 area_id 및 product-id와 충돌하고 내부 코드를 뒤범벅. –

답변

0

문제는 foreach 루프 내에서 호출되는 "반환"문 수 있습니다 감사합니다. Gridview 열 값을 반환합니다. 루프 내부의 값을 imploding하거나 문자열로 추가하고 루프 이후에 imploded 문자열을 반환하십시오. 그게 문제 일 수 있습니다.

+0

아니요 지금 외부에 진술서를 적어 두었습니다. 변경이 없습니다 ... –

+0

@MohanPrasad 새 변경 사항에 따라 질문을 업데이트하십시오. –

+0

변경 사항을 추가했습니다 - @ ck_arjun –