kohana 3.2 ORM find_all () со связями - PullRequest
0 голосов
/ 23 ноября 2011

У меня есть 3 таблицы:

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-> media пусто)

Я видел на некоторых форумах, что что-то подобное может работать:

$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 голосов
/ 23 ноября 2011

Если у вас есть отношение hsip в обеих моделях, определенное следующим образом:

// 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).

...