我有以下型号:
在指定的关联中,员工具有默认条件
public $hasMany = array(
'Employee' => array(
'className' => 'Employee',
'foreignKey' => 'company_id',
'dependent' => true,
'conditions' => array(
'Employee.isRemoved' => 0
),
)
);
该关联具有未删除员工的默认条件。我在公司上使用以下查询查询仅获取名称与字符串匹配的员工:
$this->Company->find('all', array(
'contain' => array(
'Employee' => array(
'conditions' => array(
'Employee.name LIKE' => '%'.$search_text.'%')
),
'fields' => array('Employee.id, Employee.name')
)
)
));
我面临的问题是,当我在contains中使用条件时,不会应用关联中指定的默认条件,并且未指定条件键时,将应用关联中指定的默认条件。
这是Cakephp的默认行为吗?如何继续?我正在使用Cakephp 2.8.4
答案 0 :(得分:1)
我无法告诉您模型中的条件是否被覆盖是CakePHP的默认行为。但是,我可以为您提供一个可能的选择:
通过在模型中使用beforeFind()回调,您可以添加'Employee.isRemoved' => 0
条件。
因此,在您的Company
模型中,您可以执行以下操作:
function beforeFind(array $queryData) {
if(isset($queryData['contain']['Employee'])) {
//Notice the extra [] to not overwrite the conditions set in the controller
$queryData['contain']['Employee']['conditions'][]['Employee.isRemoved'] = 0;
}
return $queryData;
}
免责声明:我没有测试此代码。