В документации Laravel говорится, что нужно хранить следующее:
public function store(Request $request)
{
// Validate the request...
$flight = new Flight;
$flight->name = $request->name;
$flight->save();
}
Однако почему бы и не следующим образом:
public function store(Request $request)
{
Flight::create($request->all());
}
Приведенный выше пример довольно прост, поскольку он имеет только одно поле. Но я полагаю, что довольно утомительно делать что-то со многими полями и назначать каждое из них, а не просто передавать весь запрос $, как во втором примере?






Первый вариант дает вам лучший контроль над тем, что входит в новую модель. Если вы сохраните все из запроса, то пользователь может ввести поля, которые вы не хотите сохранять для новой модели в вашем методе store.
Например, в вашем рейсе есть столбец is_top_priority, который объявлен как заполняемый в вашей модели Flight, но при создании нового рейса вы хотите установить только name для своего рейса (и оставьте is_top_priority равным нулю или, возможно, он имеет значение по умолчанию 0 в вашей таблице) . Если вы пишете Flight::create($request->all());, то пользователь может внедрить <input name = "is_top_priority" value = "1"> и получить преимущество вашего кода.
Поэтому использовать fill($request->all()) не рекомендуется. Используйте $request->only(...) или назначьте каждое необходимое поле вручную, как показано в первом примере.
Например, ваша модель имеет несколько полей, таких как имя, адрес электронной почты, пароль, статус и т. д. Запросите подтверждение имени, электронной почты и пароля, и если вы это сделаете:
Flight::create($request->all());
Клиент может отправлять с другими полями статус, но вы меняете статус вручную. Я делаю это:
Flight::create([
'name' => $request->get('name'),
'email' => $request->get('email'),
'password' => $request->get('password'),
'status' =>config('params.flight.status.not_active'),
]);