後日の禍とならぬようここに書き残しておきます。
TL;DR
saveメソッドを使うときはnew
してから使用すること。
もしくはcreateメソッドを使うこと。
データが一行しか入らない
CSVインポート機能等で一行読み込んでインサート・・・という処理を書くときに恐らく
foreach等を使って行数分、処理を実行させるかと思うのですが、
処理例)
import.php
// CSVから読み込んだ行数分saveを行う
foreach ($csvList as $attributes) {
$this->fill($attributes)->save();
}
その時にsaveメソッドを使ってるとデータが一行しか入らないという現象に遭遇します。
(具体的にはCSVの場合、最終行のデータしか入っていないようになってるはず)
原因
それもそのはずで、リーダブルに書いてある通り、
saveメソッドを使うときはnew
してから使用しないと同じインスタンスを何回もsaveする、という動きになってしまいます。
モデルから新しいレコードを作成するには新しいインスタンスを作成し、saveメソッドを呼び出します。
なのでsaveメソッドを使うときは必ずnew
してから使用するか、createメソッドを使用するようにしましょう
ということでした。
※createメソッドを使用する場合は必ず$fillable
か $guarded
を指定すること!