我有3张桌子:
artists{id,name}
media{id,name,filename}
media_artists{artist_id,media_id}
我按照Kohana指南中的描述创建了具有n-n关系的模型。
当我在控制器中时:
$artist_view = new View('artists/profile');
$artist_id = $this->request->param('id');
$artist_view->artists = $artist_model->where('id', '=', $artist_id)->find();
$artist_view->media = $artist_model->media->find_all();
它工作正常,我可以在我的视图中调用与此特定艺术家相关的媒体条目。
现在我想做一个查询,我得到所有的艺术家,他们的相关媒体,都在相同的SQL结果,但我找不到语法。 这样:
$artist_view->artists = $artist_model->order_by('name' , 'ASC')->find_all();
$artist_view->media = $artist_model->media->find_all();
不起作用(不会抛出错误,但$ artist_view->媒体为空)
我在一些论坛上看到过这样的事情可能有用:
$artist_model->order_by('name' , 'ASC')->with('media')->find_all();
但它对我不起作用。
在我看来,最后,我希望能够做到这样的事情:
foreach($artists as $a){
echo $a->name."<br />";
foreach($a->media as $m) echo $m->name."<br />";
echo "<br />";
}
答案 0 :(得分:0)
如果两个模型中的relationhsip定义如下:
// In artist model.
protected $_has_many = array(
'media' => array('through' => 'media_artists'),
);
// In media model.
protected $_has_many = array(
'artists' => array('through' => 'media_artists'),
);
它应该可以使用(编辑!):
$artists = ORM::factory('artist')->find_all();
foreach ( $artists as $artist )
{
foreach ( $artist->media->find_all() as $m )
{
echo $m->name;
}
}
我的一个项目遇到了同样的问题,这个解决方案对我有用(Kohana 3.2.0)。