Модель соединения CakePHP и ее собственные отношения
В Shop
модель у меня есть:
public $belongsTo = array(
'Company' => array()
);
модель Company
имеет свои собственные отношения, определенные в классе модели. Как я могу получить Company relation
при выполнении:
$this->Shop->find('all',
array(
'conditions' => array(
'Shop.loyaltycard' => 0,
)
)
);
2 ответа
Если вы правильно объявили отношения, 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.
Если вы не хотите найти все связанные модели, а просто компанию, вы можете добавить$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