PCS開発チーム

PCS開発チーム

Eloquentを使う時はQuery Builderに処理が移行しないように使うことが重要

SQLだけ知ってる人が新たにLaravelを使おうとするとSQLで見たことあるメソッドを使おうとする。

use App\Models\Post;

Post:::insert([]);

「LaravelのEloquentを使って、レコードの追加はinsert…」何も間違ってないように見えるけどこれが壮大な罠。
Eloquentを使ってるように見えるけど実際はQuery Builderに処理が移行している。
「EloquentにないメソッドはQuery Builderのメソッドが使われる」
Laravel内部で勝手に移されてるので知ってないとEloquentを使ってるつもりのままずっと間違える。
$fillableはEloquentの機能なのでQuery Builderでは無効。
Eloquentを使ってるつもりでQuery Builderを使うと$fillableのような安全機能が無視されるので非常に危険。

ここまで理解しているLaravelに慣れてる人は「Eloquentの機能しか使わない」対策をしている。

新規作成

$post = Post::create([]):

更新

$post->fill([])->save();

この辺はLaravelを使っていれば自然と身に付く定番の型なので覚える。
create() fill() save() どれもQuery BuilderにはないのでうっかりでもQuery Builderに移行していたらメソッドがなくエラーで落ちるから必ず気付く。