2016-03-14 32 views
0

我有這個功能在我的控制器:如何在yii2中做一個嵌套的foreach循環?

public function actionResource() 
{ 
    $resourcegrporgs = Organization::find()->where(['groupid' => '1'])->all(); 
    $resmembers = ''; 
    foreach ($resourcegrporgs as $resourcegrporg) { 
     $resmembers = $resourcegrporg->getMembers()->all(); 
    } 
    return $this->render('resource', [ 
     'resourceMembers' => $resmembers, 
     'resourceGroups' => $resourcegrporgs, 
    ]); 
} 

在我看來,我試圖讓每個組的成員如下:

<?php foreach ($resourceGroups as $resourceGroup): ?> 
<section class="team"> 
    <div class="container"> 
    <div class="row"> 
     <div class="col-md-10 col-md-offset-1"> 
     <div class="col-lg-12"> 
      <h4 class="description"><?= $resourceGroup->name ?></h4> 
      <div class="row pt-md"> 
      <?php foreach ($resourceMembers as $resourceMember): ?> 
      <div class="col-lg-3 col-md-3 col-sm-4 col-xs-12 profile"> 
       <div class="img-box"> 
       <img src=<?= $resourceMember->picture ?> class="img-responsive"> 
       <ul class="text-center"> 
        <a href="#"><li><i class="fa fa-facebook"></i></li></a> 
        <a href="#"><li><i class="fa fa-twitter"></i></li></a> 
        <a href="#"><li><i class="fa fa-linkedin"></i></li></a> 
       </ul> 
       </div> 
       <h1><?= Html::a(Html::encode($resourceMember->name),['memberdetail', 'id' => $resourceMember->id]) ?></h1> 
       <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p> 
      </div> 
      <?php endforeach; ?> 
      </div> 
     </div> 
     </div> 
    </div> 
    </div> 
</section> 
<?php endforeach; ?> 

這裏是組織模式;

class Organization extends \yii\db\ActiveRecord 
{ 
    /** 
    * @inheritdoc 
    */ 
    public static function tableName() 
    { 
     return 'organization'; 
    } 

    /** 
    * @inheritdoc 
    */ 
    public function rules() 
    { 
     return [ 
      [['name', 'active', 'groupid'], 'required'], 
      [['active', 'groupid'], 'integer'], 
      [['lastdatemodified'], 'safe'], 
      [['name', 'logo', 'userid'], 'string', 'max' => 100] 
     ]; 
    } 

    /** 
    * @inheritdoc 
    */ 
    public function attributeLabels() 
    { 
     return [ 
      'id' => 'ID', 
      'name' => 'Name', 
      'logo' => 'Logo', 
      'active' => 'Active', 
      'userid' => 'Userid', 
      'lastdatemodified' => 'Lastdatemodified', 
      'groupid' => 'Groupid', 
     ]; 
    } 

    /** 
    * @return \yii\db\ActiveQuery 
    */ 
    public function getMembers() 
    { 
     return $this->hasMany(Member::className(), ['organizationid' => 'id']); 
    } 

    /** 
    * @return \yii\db\ActiveQuery 
    */ 
    public function getGroup() 
    { 
     return $this->hasOne(Group::className(), ['id' => 'groupid']); 
    } 
} 

然而,foreach環路成員將返回在最後一組的成員,每另一組這樣我的問題:
我怎樣才能解決這個問題,從而使得各組單獨的成員?

+0

爲什麼你在你的資源操作的foreach循環?每次只是覆蓋該變量。當它傳遞給你的觀點時,它只是最後一批成員。 – Scott

+0

是的,我注意到後來......我應該在控制器級忽略這個foreach,並在視圖中使用它? –

+0

我需要找到一種方法來獲取每個組的成員......這就是爲什麼我首先想到了資源控制器中的foreach –

回答

1

除非我錯過了一些東西,這很容易。只要改變你的行動爲以下內容:

public function actionResource() 
{ 
    $resourcegrporgs = Organization::find()->where(['groupid' => '1'])->all(); 
    return $this->render('resource', [ 
     'resourceGroups' => $resourcegrporgs, 
    ]); 
} 

然後在你看來,內部foreach循環應該僅僅是這樣的:

<?php foreach ($resourceGroup->members as $resourceMember): ?> 
    <div class="col-lg-3 col-md-3 col-sm-4 col-xs-12 profile"> 
     <div class="img-box"> 
      <img src=<?= $resourceMember->picture ?> class="img-responsive"> 
      <ul class="text-center"> 
       <a href="#"><li><i class="fa fa-facebook"></i></li></a> 
       <a href="#"><li><i class="fa fa-twitter"></i></li></a> 
       <a href="#"><li><i class="fa fa-linkedin"></i></li></a> 
      </ul> 
     </div> 
     <h1><?= Html::a(Html::encode($resourceMember->name),['memberdetail', 'id' => $resourceMember->id]) ?></h1> 
     <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p> 
    </div> 
<?php endforeach; ?> 
+0

非常感謝...我對yii2相當新,我didn'我知道這可以做到這一點...以及我真的很感激幫助...我堅持了2天 –