SQL допускает использование ORDER BY и LIMIT инструкций в UPDATE и DELETE запросах, почему-то не нашёл возможности их задать в db->Command и Query. Приходится писать что-то вроде
Query только для SELECT запросов, у него нет методов update и delete.
У QueryBuilder есть методы update и delete, но они возвращают сразу строку и не принимают параметры orderBy и limit.
newartix писал(а):Query только для SELECT запросов, у него нет методов update и delete.
У QueryBuilder есть методы update и delete, но они возвращают сразу строку и не принимают параметры orderBy и limit.
Например. Есть таблица с чем-то вроде отложенных задач, есть обработчики этих задач, обработчик сначала помечает задачу своим ключом (UPDATE task SET handler_key = 'key' WHERE handler_key IS NULL ORDER BY created_at ASC LIMIT 1), затем выбирает её же (SELECT * FROM task WHERE handler_key = 'key'), гарантированно работает с ней он один.
UPDATE tbl_agreement_tariff
SET end_datetime = NULL
WHERE id_agreement = @id_agreement
ORDER BY start_datetime DESC LIMIT 1;
SQL Исправления моего планировщика для тестирования, хотя по факту такие запросы могли бы быть реализовны чаще но я их зачем то все реализовал на уровне DB Что не привело к серьезному геморою. Даже незнал что Yii2 Не может этого, в будущем надеюсь все же дойдут руки до реализации
rommcr писал(а): ↑2015.07.25, 19:45
Тоже столкнулся с необходимостью построения подобного запроса.
Судя по всему, за 8 месяцев ничего не изменилось..
И за 3 года - также
Всем обвиняющим в некропостинге - привет. Столкнулся с точно такой же ситуацией как и ТС. Спасибо, что в шапке есть готовый велосипед
mkramer писал(а): ↑2015.07.29, 17:05
Так товарищи, newartix, tar_m, rommcr, вы же программисты. Если вам часто такая возможность нужна, допишите в фрейсворк и сделайте Pull Request
Ибо вместо того, чтоб сделать плохо - лучше не лезть. Чтоб такое реализовать нужно знать специфику всех поддерживаемых СУБД