30 июня 2018 г., 0:12:13 12350 Yii2 yii2 select for update active record 7 Комментариев
Задача предельно простая: добавить SELECT FOR UPDATE
. В обсуждении подобного вопроса в оф. репозитории фреймворка нам сообщают, что из коробки такой возможности нет и что решать данную проблему нужно самому.
Так же есть расширение, которое не имеет какого-то смысла вообще, т.к. суть работы SELECT FOR UPDATE
не реализована: отсутствует актуализация данных после блокировки. Придется обновлять записи после блокировки вручную и надеятся, что это отработает корректно.
Еще есть вот такое расширение, но я его особо не смотрел. Вроде рабочее. Если кто-то тестировал или использовал - пишите в комментарии.
Дак что же делать для тех, кто хочет просто применить SELECT FOR UPDATE
? Решение очень простое! Нужно всего лишь...
использовать yii\db\ActiveRecord::findBySql()
!
Пишем метод в модели:
public static function findOneForUpdate(int $id): ?ActiveRecord { $sql = self::find() ->where(['id' => $id]) ->createCommand() ->getRawSql(); return self::findBySql($sql . ' FOR UPDATE')->one(); }
И все! Вот так просто.
Комментарии [7]
Новый комментарий