定义模型中的全局条件

时间:2013-07-09 08:45:23

标签: cakephp cakephp-2.0 cakephp-2.1 cakephp-appmodel

是否可以为模型定义全局条件?

我有2个模型:UserStudent。在数据库中,他们都使用表users,但每个学生都将parent_id设置为其所有者(设置在同一个表中),而每个用户都将parent_id设置为Null }。

当我使用例如

$this->find('all'); 

Student模型中我想强制Cake只返回数据库表users中那些parent_id != Null的记录。

所以问题是 - 我可以在模型中定义某种全局条件吗?这样的事情:

public $conditions = array('Student.parent_id !=' => Null);

2 个答案:

答案 0 :(得分:6)

使用beforeFind

您可以使用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