gpt4 book ai didi

php - beforeFind() 添加条件

转载 作者:可可西里 更新时间:2023-10-31 22:12:19 25 4
gpt4 key购买 nike

我正在尝试根据客户端条件过滤我的应用程序中返回的所有内容。这是在我的 AppModel 中:

public function beforeFind($queryData) {
parent::beforeFind();
$queryData['conditions'] = array('client_id' => 2);
$this->log($queryData);
}

虽然它不会过滤返回的内容,但条件信息会显示在日志中。我做错了什么?

最佳答案

使用 beforeFind() 如果您希望查找使用它,您应该返回您已修改的 $queryData 数组。这是您当前的问题。

public function beforeFind($queryData) {
parent::beforeFind();
$queryData['conditions'] = array('client_id' => 2);
return $queryData;
}

但是,您还有一些其他小问题可能会给您带来麻烦。

  1. 您不应直接在 beforeFind() 中设置条件,而应添加。如果您要调用带条件的查找怎么办?考虑一下:

    $this->MyModel->find('first', array(
    'conditions' => array(
    'MyModel.active' => 1
    )
    ));

    您希望查找使用该条件,但也希望您的 beforeFind() 使用 beforeFind() 自动仅返回 client_id = 2 的结果。不幸的是,在你的 beforeFind() 中有这一行:

    $queryData['conditions'] = array('client_id' => 2);

    您刚刚完全覆盖了条件数组,并丢失了 MyModel.active = 1 的其他条件。

  2. 您还应确保说明条件中的字段属于哪个模型。这是一个很好的做法,如果您有两个模型,它们都有一个名为 client_id 的字段,那么 future 可以验证您的代码。您可以使用 $this->alias 获取当前模型的别名,如果您为模型使用了不同的别名,这也将允许您的代码工作。

所以你的最终代码应该是:

    public function beforeFind($queryData) {
parent::beforeFind();
$queryData['conditions'][$this->alias . '.client_id'] = 2;
return $queryData;
}

关于php - beforeFind() 添加条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18094375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com