Модель соединения 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

Другие вопросы по тегам