РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
285 of 1392 menu

Метод sharedLock

Метод sharedLock применяется к запросу Eloquent или Query Builder и устанавливает разделяемую блокировку на выбираемые записи. Это означает, что другие транзакции могут читать эти записи, но не могут изменять их до снятия блокировки. Метод не принимает параметров и возвращает тот же запрос с добавленным условием блокировки.

Синтаксис

<?php Model::sharedLock()->get(); ?>

Пример

Давайте заблокируем статью с идентификатором 1 для чтения в рамках транзакции:

<?php namespace AppHttpControllers; use AppModelsArticle; use IlluminateSupportFacadesDB; class ArticleController extends Controller { public function index() { $res = DB::transaction(function () { $article = Article::where('id', 1) ->sharedLock() ->first(); return $article ? $article->title : null; }); echo $res; } } ?>

Результат выполнения кода:

"article title"

Пример

Давайте получим все статьи с разделяемой блокировкой в транзакции:

<?php namespace AppHttpControllers; use AppModelsArticle; use IlluminateSupportFacadesDB; class ArticleController extends Controller { public function index() { $res = DB::transaction(function () { $articles = Article::sharedLock()->get(); $titles = []; foreach ($articles as $article) { $titles[] = $article->title; } return $titles; }); var_dump($res); } } ?>

Результат выполнения кода:

["article 1", "article 2", "article 3", "article 4", "article 5"]

Пример

Использование разделяемой блокировки с другими условиями выборки:

<?php namespace AppHttpControllers; use AppModelsArticle; use IlluminateSupportFacadesDB; class ArticleController extends Controller { public function index() { $res = DB::transaction(function () { $articles = Article::where('status', 'published') ->orderBy('id') ->sharedLock() ->get(); $titles = []; foreach ($articles as $article) { $titles[] = $article->title; } return $titles; }); var_dump($res); } } ?>

Результат выполнения кода:

["article 2", "article 3", "article 5"]

Пример

Разделяемая блокировка в комбинации с методом lockForUpdate (будет использована разделяемая блокировка):

<?php namespace AppHttpControllers; use AppModelsArticle; use IlluminateSupportFacadesDB; class ArticleController extends Controller { public function index() { $res = DB::transaction(function () { $article = Article::where('id', 1) ->sharedLock() ->lockForUpdate() ->first(); return $article ? $article->title : null; }); echo $res; } } ?>

Результат выполнения кода:

"article title"

Смотрите также

  • метод lockForUpdate,
    который устанавливает монопольную блокировку для изменения
  • метод get,
    который выполняет запрос и возвращает коллекцию
  • метод first,
    который возвращает первую найденную запись
  • метод transaction,
    который выполняет операции в транзакции базы данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить