Согласно документации есть несколько способов создать новую модель и сохранить данные в БД.
Это неизбежно приводит к вопросу «Как правильно/лучше?» и обычно тема перетекает в холивар, с доводами а-ля "у нас в проекте пишут вот так".
# Отличия
Первый пример отличается от второго и третьего только тем, что не требует указания $fillable в модели.
1$post = new Post();2$post->title = $title;3$post->content = $content;4$post->save();5 6$post->id;
Второй и третий примеры ничем не отличаются, кроме того, что вариант с create() более компактен.
1$post = new Post($data);2$post->save();3 4$post->id;
1$post = Post::create($data);2 3$post->id;
В четвёртом примере используется метод insert() , который возвращает boolean, а не саму модель. Также метод не заполнит автоматически поля created_at и updated_at, касты и события модели работать не будут, т.к. метод является частью QueryBuilder, а не модели.
1DB::table('posts')->insert($data);2 3Post::insert($data);4 5$postId = Post::insertGetId($data);
Метод insertGetId() работает аналогично и возвращает ID вставленной записи, при этом за один раз сохранить можно только одну запись, в отличии от простого insert(), который позволяет сохранять несколько записей.
# Выводы
Можно выбрать любой способ. Если не нужен ручной контроль и стремиться за лаконичностью, то create(), если необходимо сохранить много записей за раз, то insert()