Я пытаюсь правильно использовать ORM Laravel и правильно моделировать свою базу данных.
Рассмотрите следующую схему:
Я хочу обновить статус любых "подсессий" через конечную точку, которую я создаю. Кроме того, для этого пользователь должен быть аутентифицирован и владеть объектом "store".
http://my-api/sub-sessions/1/status [PUT]
Как вы могли догадаться, "1" в пути к конечной точке на самом деле является идентификатором моего объекта подсеанса.
Таким образом, вызов этого URL с правильным параметром должен обновить статус моего подсеанса, только если я действительно владею хранилищем с учетной записью, с которой я аутентифицирован.
Чтобы проверить, действительно ли "sub_sessions" связаны с "sessions", которые сами по себе связаны с хранилищем, связанным с текущей учетной записью, я делаю следующее:
Я делаю это, и это работает, но я почти уверен, что есть гораздо более эффективный и быстрый способ сделать это.
Как мне оптимизировать все это?
$subSessionId = 1; // Path argument of the URL http://my-api/sub-sessions/1/status
$account = $request->user(); // User is authenticated, always
$subSessionExist = SubSessions::filter()->withWhereHas('sessions', fn($query) =>
$query->withWhereHas('store', fn($query) =>
$query->where('owner_id', '=', $account->id)
))->get()->first()['id'] == $subSessionId;