Каждая модель Eloquent - это конструктор запросов, позволяющий делать запросы к связанной таблице. Приведём простейший пример, в котором используется метод "all", возвращающий все записи:
<?php
use App\Food;
$flights = App\Food::all();
foreach ($food as $el) {
echo $el->name;
}
?>
Если нужно сделать определённую выборку, то можно добавить ограничения в запрос, а затем использовать метод get:
<?php
$food = App\Food::where('active', 'Y')
->orderBy('name', 'desc')
->take(10)
->get();
?>
Для получения только одной записи из таблицы необходимо использовать метод "find", который в качестве параметра принимает id записи. А если передать вместо id массив из id, то можно получить сразу несколько записей:
<?php
$mainFood = App\Food::find(1);
$someFood = App\Food::find([1, 4, 6]);
?>
Все методы из конструктора запросов также доступны при работе с Eloquent. К примеру, попробуем поставить условие через метод "where" и получить первую запись методом "first":
<?php
$mainFood = App\Food::where('id', 9)->first();
?>
Порой искомые данные могут быть не найдены. Тогда для генерации отклика 404 для страницы "документ не найден" в Laravel можно использовать методы findOrFail и firstOrFail. Эти методы автоматически вызовут исключение "ModelNotFoundException", если результат запроса будет пустым:
<?php
$model = App\Food::findOrFail(1);
$model = App\Food::where('id', '>', 93)->firstOrFail();
?>
Чтобы поймать исключение
ModelNotFoundException
, можно составить следующую логику в файле
app/Exceptions/Handler.php
:
<?php
use Illuminate\Database\Eloquent\ModelNotFoundException;
class Handler extends ExceptionHandler {
public function render($request, Exception $e) {
if ($e instanceof ModelNotFoundException) {
// код для обработки исключения
}
return parent::render($request, $e);
}
}
?>