如何使用PHP和Zend Framework 2回显一对多关系?

时间:2014-12-02 20:17:28

标签: php zend-framework zend-framework2

我目前正在使用Zend Framework 2,并想知道我是如何回应一对多关系的?使用Album示例我有另一个包含乐队成员的表(每个专辑可以有多个成员)我正在使用两个查询进行此练习。一个选择所有专辑,另一个选择所有专辑乐队成员。我不想复制专辑,但希望专辑回显一次,乐队成员列表就在它旁边。非常感谢!

每张专辑

<?php foreach ($albums as $albumd) : ?>
 <tr>
     <td><?php echo $this->escapeHtml($albumd->title);?></td>
     <td><?php echo $this->escapeHtml($albumd->artist);?></td>

每位艺术家

<?php foreach ($bandmembers as $member) : ?>
 <tr>
     <td><?php echo $this->escapeHtml($member->firstname);?></td>
     <td><?php echo $this->escapeHtml($member->lastname);?></td>

当它们分开但它如何在另一个中嵌入一个时这是有效的(这是最好的方法)吗?我希望我的结果打印类似于下面。我还想使用类似的方法添加其他关系(例如genere)。当我尝试嵌入时,我得到一个倒带错误。

Album: Dark Side Of The Moon
Artist: Pink Floyd 
     Members:  Roger Waters
     Members:  David Gilmour
     Members:  Richard Wright
     Members:  Nick Mason

Album: Working Mans Dead
Artist: Grateful Dead
     Members:  Jerry Garcia
     Members:  Bob Weir
     Members:  Phil Lesh
     Members:  Bill Kreutzmann

下方当前视图:

 <?php foreach ($albums as $albumd) : ?>
 <tr>
     <td><?php echo $this->escapeHtml($albumd->title);?></td>
     <td><?php echo $this->escapeHtml($albumd->artist);?></td>
      <?php foreach ($artist as $member) : ?>
     <tr> <td><?php echo $this->escapeHtml($member->artist_first);?></td>
          <?php endforeach; ?>
     <td>
         <a href="<?php echo $this->url('album',
             array('action'=>'edit', 'id' => $albumd->id));?>">Edit</a>
         <a href="<?php echo $this->url('album',
             array('action'=>'delete', 'id' => $albumd->id));?>">Delete</a>
     </td>
 </tr>
 <?php endforeach; ?>

1 个答案:

答案 0 :(得分:0)

在这种情况下,$artist无法正确。您将相册列表传递给视图(到目前为止一直很好),但$artist需要针对相册循环的每次迭代进行更改,但事实并非如此。我建议在Album对象上创建一个getArtists()方法,然后在视图中调用它,而不是让$artist在控制器中预先构建一个数组。像这样:

foreach ($albums as $album) {
    // print album stuff
    foreach ($album->getArtists() as $artist) {
        // print artist stuff
    }
}