我目前正在使用 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
}
}