Как заблокировать стол с помощью Laravel? - PullRequest
0 голосов
/ 28 ноября 2018

Я хочу заблокировать таблицу внутри транзакции.Примерно так:

  DB::transaction(function (){
    DB::statement('LOCK TABLES important_table WRITE');
    //....
  });

Однако строка DB::statement('LOCK TABLES important_table WRITE'); всегда вызывает следующую ошибку:

SQLSTATE [HY000]: общая ошибка: 2014 г. Невозможно выполнить запросы, пока другие небуферизованызапросы активны.Рассмотрите возможность использования PDOStatement :: fetchAll ().В качестве альтернативы, если ваш код работает только с mysql, вы можете включить буферизацию запросов, установив атрибут PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY.(SQL: ЗАБЛОКИРОВАТЬ СТОЛЫ officeSeal WRITE)

Как заблокировать таблицу в Laravel?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Как отмечалось в комментариях других пользователей, я не уверен, что блокировка таблицы - это единственный выход.Однако, если вы настаиваете, вы можете использовать Laravel Pessimistic Locking .А именно, методы sharedLock() и lockForUpdate(), как указано в документации.

Вы заметите, что пример в документации не использует Eloquent , но использует Query Builder .Тем не менее, эти вопросы и ответы , по-видимому, указывают на то, что это можно сделать и с Eloquent.

Возможно, также стоит прочитать эту статью , которая противопоставляет пессимистический иРеализация оптимистичной блокировки в Laravel.

0 голосов
/ 28 ноября 2018

Можно заблокировать стол в Laravel следующим образом:

DB::raw('LOCK TABLES important_table WRITE');

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...