Модель соединения CakePHP и ее собственные отношения

В Shop модель у меня есть:

public $belongsTo = array(
'Company' => array()
);

модель Company имеет свои собственные отношения, определенные в классе модели. Как я могу получить Company relation при выполнении:

$this->Shop->find('all',
array(
'conditions' => array(
'Shop.loyaltycard' => 0,
)
)
);

1

Решение

Если вы правильно объявили отношения,find() автоматически выберет первый уровень связанных моделей, если вы не изменили уровень рекурсии по умолчанию (равный 1).

Если это не удается, попробуйте следующее:

$this->Shop->recursive=1;
$this->Shop->find('all',array(
'conditions' => array(
'Shop.loyaltycard' => 0,
)
));

Подробнее об атрибуте модели recursive.

Другой вариант — загрузить поведение Containable, которое позволит вам отфильтровать, какие отношения вы хотите получить.

$this->Shop->Behaviors->load('Containable'); //or make your model act as Containable
$this->Shop->contain('Company');
$this->Shop->find('all',array(
'conditions' => array(
'Shop.loyaltycard' => 0,
)
));

Еще ContainableBehavior.

Кроме того, измените декларацию о ваших отношениях следующим образом:

public $belongsTo = array(
'Company'
);

Не уверен, как пустой массив влияет на ваши отношения, но это может привести к сбою. Обратите внимание, что это будет работать, только если вы следовали CakePHP конвенции.

1

Другие решения

Если вы не хотите найти все связанные модели, а просто компанию, вы можете добавить
$actsAs = array('Containable');
в вашей модели магазина, а затем выполните поиск следующим образом:

$this->Shop->find('all',array(
'conditions' => array(
'Shop.loyaltycard' => 0,
),'contain' => array(
'Company'
));

См, CakePHP содержит http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html

0