是否可以为模型定义全局条件?
我有2个模型:User
和Student
。在数据库中,他们都使用表users
,但每个学生都将parent_id
设置为其所有者(设置在同一个表中),而每个用户都将parent_id
设置为Null
}。
当我使用例如
时$this->find('all');
在Student
模型中我想强制Cake只返回数据库表users
中那些parent_id != Null
的记录。
所以问题是 - 我可以在模型中定义某种全局条件吗?这样的事情:
public $conditions = array('Student.parent_id !=' => Null);
答案 0 :(得分:6)
您可以使用before find修改为模型发出的所有查询:
function beforeFind(array $queryData) {
$queryData['conditions'][]['NOT'][$this->alias . '.parent_id'] = null;
return $queryData;
}
小心使用此技术不会覆盖现有条件(请注意额外的[]
),否则对“not parent_id 2”的查询将变为“not parent_id null”。
答案 1 :(得分:0)
您可以使用afterFind回调来更改模型中的查找
public function afterFind($results, $primary = false) {
foreach ($results as $key => $val) {
if ($val['parent_id'] == NULL) { //no parent_id set then remove that part of the results
unset($results[$key]);
}
}
return $results;
}
参考:http://book.cakephp.org/2.0/en/models/callback-methods.html