Как выполнить соединения с литиевыми моделями? - PullRequest
4 голосов
/ 22 февраля 2012

Я прочитал lithium \ data \ model \ query, но я не видел примеров соединений.

Ответы [ 2 ]

5 голосов
/ 25 февраля 2012

Существует несколько способов выполнить соединение с Lithium.

  1. Lithium будет обрабатывать соединения, для которых у вас есть определенные отношения ( примеры в руководстве ).
  2. Вы можете добавить объединения к существующему объекту Query, используя метод join() (см. API )).
  3. Вы можете передать массив объектов Query искателям, используя ключ joins.
  4. Вы можете передать 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.

Обновление : Удалены ссылки, ссылки на которые были вставлены.

1 голос
/ 22 февраля 2012

Если вы установили связь (используя hasOne, hasMany или ownTo), вы можете получить связанные данные, введя ключ with в опциях вашего find вызова.

Как это:

$categories = Categories::find('all', array(
  'with' => 'Products'
));

Для более подробной информации обратитесь к руководству по отношениям .

...