- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试根据客户端条件过滤我的应用程序中返回的所有内容。这是在我的 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;
}
但是,您还有一些其他小问题可能会给您带来麻烦。
您不应直接在 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
的其他条件。
您还应确保说明条件中的字段属于哪个模型。这是一个很好的做法,如果您有两个模型,它们都有一个名为 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/
我正在尝试根据客户端条件过滤我的应用程序中返回的所有内容。这是在我的 AppModel 中: public function beforeFind($queryData) { parent::
在 beforeFind 的 cakephp 2.x 中,我可以检查是否设置了某些条件!empty($queryData['conditions'][$this->alias.'.field']) 或
在一些模型类中我想实现缓存。我想这样做: UsersModel::model()->findByAttributes([...]) 在那个类中,我想覆盖方法 beforeFind() 以首先将请求发送
在我的 CakePHP 1.2.5 应用程序中,我有一个属于 User 模型的 Profile 模型。 User 模型有一个 username 字段,当对 Profile 模型执行 find() 时,
Yii1 曾经有 beforeFind 方法,您可以在其中修改查询或您可能想做的任何其他事情。 例如,在 Yii2 中,建议的替代方案是使用 modelQuery 解决方案 class MyModel
在sails.js 中,模型支持验证、创建、更新和销毁的生命周期回调。 是否也支持 find() 或 query 的回调?像 beforeFind() 和 afterFind()? 这个想法是一样的。
我是一名优秀的程序员,十分优秀!