Поведение функции firstOrFail () в Laravel - PullRequest
0 голосов
/ 13 мая 2018

У меня есть фабрика с этой строкой:

$channel = \App\Model\Channel::firstOrFail();

Как устанавливается идентификатор?Я знаю, что есть такая функция, как

$channel = \App\Model\Channel::firstOrFail($id);

Но в чем разница с приведенной выше и как ее установить?

Ответы [ 2 ]

0 голосов
/ 13 мая 2018
$channel = \App\Model\Channel::firstOrFail();

Просто вернет первый канал в модели, обычно тот, у которого наименьший идентификационный номер. Это можно использовать для проверки наличия каких-либо каналов в базе данных, например, Вы хотите знать, что есть канал, который могут выбрать пользователи.

$id = ['id'];
$channel = \App\Model\Channel::firstOrFail($id);

То же самое, но вернет id первой модели в базе данных.

Если вы хотите вернуть элемент с определенным идентификатором, вы должны использовать

$channel = \App\Model\Channel::find($id)->firstOrFail();

или

$channel = \App\Model\Channel::findOrFail($id);
0 голосов
/ 13 мая 2018

firstOrFail просто вызывает ->take(1)->get()->first()

Если это возвращает ноль, тогда он выбрасывает ModelNotFoundException и устанавливает модель в текущий экземпляр построителя запросов.

Channel,в вашем случае, расширяет Model, который использует Query Builder под капотом, который имеет функцию firstOrFail.

Если вы хотите установить id, то это:

$channel = \App\Model\Channel::findOrFail($id);

Кроме того, нет необходимости полностью определять ваше пространство имен, поэтому вы можете просто выполнить:

$channel = App\Model\Channel::findOrFail($id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...