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

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

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

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

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

person Wizard    schedule 18.12.2015    source источник


Ответы (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.

person Inigo Flores    schedule 18.12.2015

Если вы не хотите находить все связанные модели, а только компанию, вы можете добавить $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

person Max90    schedule 18.12.2015