Я прочитал литий\данные\модель\запрос, но не нашел примеров объединений.
Как выполнять соединения с литиевыми моделями?
Ответы (2)
Существует несколько способов выполнить соединение с Lithium.
- Lithium будет обрабатывать объединения для вас, где вы определили отношения (примеры в руководстве а>).
- Вы можете добавить соединения к существующему объекту Query, используя метод
join()
(см.API)). - Вы можете передать массив объектов Query поисковикам, используя ключ
joins
. - Вы можете передать SQL непосредственно в соединение, используя
Connection->read()
.
Другие методы достаточно хорошо документированы, поэтому я приведу пример передачи объектов Query поисковику.
$fields = array('id', 'name', 'slug');
$joins = array();
$joins[] = new Query(array(
'source' => 'client_tests',
'constraint' => array('Test.id' => 'client_tests.test_id'),
));
$conditions['client_id'] = $this->data['client_id'];
$tests = Test::all(array(
'conditions' => $conditions,
'fields' => $fields,
'joins' => $joins
));
source
— это таблица, к которой вы хотите присоединиться, а constraint
— это критерии присоединения. Литий присваивает таблице поиска имя модели, поэтому используйте это в своем ограничении. Затем вы можете передать соединения любому поисковику вместе с любыми другими параметрами, которые вы хотите.
Обратите внимание, что на момент написания статьи соединения (и отношения) будут работать только с реляционной базой данных, а не с такими вещами, как DBRef MongoDB.
Обновление: удалены ссылки, которые были взломаны.
Если вы установили отношения (используя hasOne, hasMany или ownTo), вы можете получить связанные данные, указав ключ with
в параметрах вашего вызова find
.
Так:
$categories = Categories::find('all', array(
'with' => 'Products'
));
Подробности см. в руководстве, посвященном отношениям.