1

Shop模型中我有:

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

模型Company在其模型类中定义了自己的关系。执行时如何获取Company relation

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

2 回答 2

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 约定时才有效。

于 2015-12-18T10:36:58.253 回答
0

如果您不想查找所有相关模型,而只想找到公司,您可以添加 $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

于 2015-12-18T10:41:07.247 回答