2015-12-18 3 views
1

В Shop модели у меня есть:CakePHP присоединиться к модели и ее собственные отношения

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 conventions.

0

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

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

См CakePHP Containable http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html

Смежные вопросы