Блог хеллоуворлдщика

SELECT FOR UPDATE в Yii2


Недавно пришлось тряхнуть стариной и вспомнить, как работать с Yii... Задача предельно проста: добавить SELECT FOR UPDATE. Но, задача не проста для Yii2, особенно, если уже долгое время работаешь с Doctrine...

Оф. репозиторий фреймворка нам сообщает, что из коробки такой возможности нет и, что решать данную проблему нужно самому.

Так же, есть расширение, которое не имеет какого-то смысла вообще, т.к. суть работы 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();
}

И все!

share via vkontakte share via facebook share via mailru share via odnoklassniki share via twitter

Комментарии [0]

Нет комментариев.