Способы сохранения новых данных

Август, 2022

Laraway

Согласно документации есть несколько способов создать новую модель и сохранить данные в БД.

Это неизбежно приводит к вопросу «Как правильно/лучше?» и обычно тема перетекает в холивар, с доводами а-ля "у нас в проекте пишут вот так".

# Отличия

Первый пример отличается от второго и третьего только тем, что не требует указания $fillable в модели.

1$post = new Post();
2$post->title = $title;
3$post->content = $content;
4$post->save();
5 
6$post->id;
highlight by torchlight.dev

Второй и третий примеры ничем не отличаются, кроме того, что вариант с create() более компактен.

1$post = new Post($data);
2$post->save();
3 
4$post->id;
highlight by torchlight.dev
1$post = Post::create($data);
2 
3$post->id;
highlight by torchlight.dev

В четвёртом примере используется метод insert() , который возвращает boolean, а не саму модель. Также метод не заполнит автоматически поля created_at и updated_at, касты и события модели работать не будут, т.к. метод является частью QueryBuilder, а не модели.

1DB::table('posts')->insert($data);
2 
3Post::insert($data);
4 
5$postId = Post::insertGetId($data);
highlight by torchlight.dev

Метод insertGetId() работает аналогично и возвращает ID вставленной записи, при этом за один раз сохранить можно только одну запись, в отличии от простого insert(), который позволяет сохранять несколько записей.

# Выводы

Можно выбрать любой способ. Если не нужен ручной контроль и стремиться за лаконичностью, то create(), если необходимо сохранить много записей за раз, то insert()