2011-11-23 53 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時)? –