kohana 3.2 ORM find_all()与关系

时间:2011-11-23 13:02:22

标签: php orm kohana-3

我有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 />";
}

1 个答案:

答案 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)。