У меня 3 таблицы:
artists{id,name} media{id,name,filename} media_artists{artist_id,media_id}
Я создал модели с nn-отношениями, как описано в руководстве 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();
но это не работает для меня.
На мой взгляд, в конце я хочу иметь возможность сделать что-то вроде этого:
foreach($artists as $a){ echo $a->name."<br />"; foreach($a->media as $m) echo $m->name."<br />"; echo "<br />"; }
Если у вас есть отношение hipip в обеих моделях, которые определены следующим образом:
// In artist model. protected $_has_many = array( 'media' => array('through' => 'media_artists'), ); // In media model. protected $_has_many = array( 'artists' => array('through' => 'media_artists'), );
Он должен работать с использованием (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).