Как удалить данные в пользовательском методе поиска в 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.

Есть ли решение для этого случая?

1 ответ

Решение

Вам придется оформить отдельный запрос. То, что вы там делаете, испортит запрос поиска, который должен быть запросом выбора.

$this
    ->query()
    ->delete()
    ->where(['member_status' => -1])
    ->andWhere(['registered >= DATE_SUB(NOW(), INTERVAL 72 HOUR)'])->execute();

использование applyOptions() в случае, если вам нужно применить параметры поиска к запросу на удаление.

$this
    ->query()
    ->delete()
    ->applyOptions($options)
    // ...
Другие вопросы по тегам