2011-11-23 89 views
0

我有3个表:Kohana的3.2 ORM find_all()与关系

artists{id,name} 
media{id,name,filename} 
media_artists{artist_id,media_id} 

我创建了N-N关系模型作为Kohana的指南中所述。

当我在控制器:

$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(); 

但它不适用于我。

在我看来,到了最后,我希望能够做一些事情是这样的:如果你在定义两个模型的relationhsip

foreach($artists as $a){ 
echo $a->name."<br />"; 
foreach($a->media as $m) echo $m->name."<br />"; 
echo "<br />"; 
} 

回答

0

如下:

​​

它应该使用(EDIT!):

$artists = ORM::factory('artist')->find_all(); 
foreach ($artists as $artist) 
{ 
    foreach ($artist->media->find_all() as $m) 
    { 
     echo $m->name; 
    } 
} 

我在我的一个项目中有同样的问题,这个解决方案适用于我( Kohana 3.2.0)。

+0

这就是我在我的模型中...我在文档中阅读它,所以我已经这样...我不明白为什么它不工作... – Piero

+0

奇怪的是,它适用于当我使用 - >查找()在一个艺术家,但没有与find_all()... – Piero

+0

嗯,但有一刻我错过了什么(见编辑):$ artist-> media-> find_all()必须使用。你在你的SQL方案中创建了关系(使用外键等,当你使用MySQL时)? –