5

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

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

例如,当我使用

$this->find('all'); 

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

所以问题是 - 我可以在模型中以某种方式定义全局条件吗?像这样的东西:

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

4

2 回答 2

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”。

于 2013-07-09T09:02:27.890 回答
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

于 2013-07-09T09:04:40.487 回答