如何在 CakePHP 3 的自定义查找器方法中删除数据
How to delete data in custom finder method in CakePHP 3
我想在自定义查找器方法中删除数据。
我的代码:
public function findPREACTIVE(Query $query, array $options) {
$query->delete()
->where(['member_status' => -1])
->andWhere(['registered >= DATE_SUB(NOW(), INTERVAL 72 HOUR)'])->execute();
return $query
->where(['email' => $options['email'], 'token_key' => $options['token_key']])
->andWhere(['member_status' => -1])
->andWhere(['registered < DATE_SUB(NOW(), INTERVAL 72 HOUR)']);
}
当我调用这个查找器时,出现错误:
You cannot call all() on a non-select query. Use execute() instead.
这种情况有解决办法吗?
您必须发出单独的查询。你在那里做的事情会弄乱查找器查询,这是一个 select 查询。
$this
->query()
->delete()
->where(['member_status' => -1])
->andWhere(['registered >= DATE_SUB(NOW(), INTERVAL 72 HOUR)'])->execute();
如果您还需要将查找器选项应用于删除查询,请使用 applyOptions()
。
$this
->query()
->delete()
->applyOptions($options)
// ...
我想在自定义查找器方法中删除数据。
我的代码:
public function findPREACTIVE(Query $query, array $options) {
$query->delete()
->where(['member_status' => -1])
->andWhere(['registered >= DATE_SUB(NOW(), INTERVAL 72 HOUR)'])->execute();
return $query
->where(['email' => $options['email'], 'token_key' => $options['token_key']])
->andWhere(['member_status' => -1])
->andWhere(['registered < DATE_SUB(NOW(), INTERVAL 72 HOUR)']);
}
当我调用这个查找器时,出现错误:
You cannot call all() on a non-select query. Use execute() instead.
这种情况有解决办法吗?
您必须发出单独的查询。你在那里做的事情会弄乱查找器查询,这是一个 select 查询。
$this
->query()
->delete()
->where(['member_status' => -1])
->andWhere(['registered >= DATE_SUB(NOW(), INTERVAL 72 HOUR)'])->execute();
如果您还需要将查找器选项应用于删除查询,请使用 applyOptions()
。
$this
->query()
->delete()
->applyOptions($options)
// ...