fomvasss
@fomvasss
PHP developer

Методы сохранение данных в модели (БД) Laravel. Какой использовать?

Я только начинаю изучать Laravel, и столкнулся с таким вопросом: какой из ниже приведенных методов будет правильнее использовать для сохранения данных в БД (модели)?
В примере сохранения ролей для пользователя, но это не так важно, аналогично и для статей.
class RoleController extends RootController
{
public function store(Request $request)
{
//Способ 1 saved
        $role= new Role();
        $role->name         = $request->get('name');
        $role->display_name = $request->get('display_name'); 
        $role->description  = $request->get('description'); 
        $role->save();

//Способ 2 saved
        $roleM = new Role();
        $role = $request->only(['name', 'display_name', 'description']);
        $roleM->saves($role);

//Способ 3 saved
        Role::create([
            'name' => $request->get('name'),
            'display_name' => $request->get('display_name'),
            'description' => $request->get('description'),
        ]);
}
}


Для второго метода, в модели Role я создал следующий метод, который вставляет данные в базу:
public function saves($role)
	{
		Role::insert($role);
	}


Еще есть вариант передавать обработан массив в модель, и там как в методе 2, создавать уже свой запрос.
Посоветуйте какой способу использовать правильно.
  • Вопрос задан
  • 3620 просмотров
Решения вопроса 1
JhaoDa
@JhaoDa
LaravelRUS Team
№1 и №3 внутри идентичны, используйте, какой больше нравится и по логике больше подходит в конкретной ситуации. №2 выкиньте.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AmdY
@AmdY
PHP и прочие вебштучки
Первый способ позволяет заполнять поля которые не разрешены в fillable

Второй способ лучше всего, только название нужно дать нормальное. Для разных контекстов правила сохранения могут быть свои, поэтому хорошим тоном считается делать раздельные конструкторы и персисты. Как пример, на этапе регистрации пользователь задаёт все поля, а при редактировании email менять нельзя.

Третий способ самый использует массовое заполнение и не заполнит поля, которые не указаны в fillable. Насколько я помню, были ещё траблы с евентами, они отличались с методом save, так что лучше делать $user->fill($role)->save();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы