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


How do I echo one to many relationships using PHP and Zend Framework 2?

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

每个专辑

<?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; ?>

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

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