2016-03-14 131 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天 –