Kohana 3 ORM: Как получить данные из сводной таблицы? и все остальные таблицы по этому вопросу - PullRequest
4 голосов
/ 24 мая 2010

Я пытаюсь использовать ORM для доступа к данным, хранящимся в трех таблицах mysql 'users', 'items' и сводной таблице для отношения многие-многие: 'user_item'

Я следовал указаниям Kohana 3.0.x ORM: чтение дополнительных столбцов в сводных таблицах

и попробовал

    $user = ORM::factory('user',1);
    $user->items->find_all();

    $user_item = ORM::factory('user_item', array('user_id' => $user, 'item_id' => $user->items));
    if ($user_item->loaded()) {
        foreach ($user_item as $pivot) {
            print_r($pivot);
        }    
    }

Но я получаю ошибку SQL:

"Неизвестный столбец 'user_item.id' в 'Порядок заказа' [SELECT user_item. * ОТ user_item ГДЕ user_id = '1' AND item_id = '' ЗАКАЗАТЬ user_item. id ASC LIMIT 1] "

Что явно ошибочно, потому что Кохана пытается упорядочить элементы по столбцу, который не существует: user_item.id. Этот идентификатор не существует, потому что первичными ключами этой сводной таблицы являются внешние ключи двух других таблиц, 'users' и 'items'.

Пытаться использовать:

$user_item = ORM::factory('user_item', array('user_id' => $user, 'item_id' => $user->items))
                    ->order_by('item_id', 'ASC');

Не имеет значения, поскольку кажется, что order_by() или любые sql-запросы игнорируются, если задан второй аргумент фабрики.

Другая очевидная ошибка в этом запросе заключается в том, что item_id = '', когда он должен содержать все элементы.

Итак, мой вопрос , как я могу получить доступ к данным, хранящимся в сводной таблице , и на самом деле , как я могу получить доступ ко всем элементам, хранящимся у определенного пользователя как У меня даже были проблемы с этим?

Спасибо

Ответы [ 2 ]

2 голосов
/ 05 июня 2010

По умолчанию все модели ORM Коханы ожидают, что первичным ключом таблицы будет «id».Вам нужно установить $ _primary_key в вашей модели на что-то другое.

0 голосов
/ 21 декабря 2011

$user_item = ORM::factory('user_item', array('user_id' => $user, 'item_id' => $user->items));

Я думаю, вам нужно указать одно значение item_id для работы, а не массив объектов.

Кроме того, чтобы найти все записи для одного пользователя, которого выдолжно быть в состоянии сделать это: $user_items = ORM::factory('user_item', array('user_id' => $user));

Это отвечает на ваш вопрос?

...