我目前正在使用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; ?>
答案 0 :(得分:0)
在这种情况下,$artist
无法正确。您将相册列表传递给视图(到目前为止一直很好),但$artist
需要针对相册循环的每次迭代进行更改,但事实并非如此。我建议在Album对象上创建一个getArtists()方法,然后在视图中调用它,而不是让$artist
在控制器中预先构建一个数组。像这样:
foreach ($albums as $album) {
// print album stuff
foreach ($album->getArtists() as $artist) {
// print artist stuff
}
}