LoginSignup
14
6

More than 5 years have passed since last update.

【Laravel(Lumen)】saveメソッドを使うとデータが一行しか登録されない原因

Last updated at Posted at 2017-12-25

後日の禍とならぬようここに書き残しておきます。

TL;DR

saveメソッドを使うときはnewしてから使用すること。
もしくはcreateメソッドを使うこと。

データが一行しか入らない

CSVインポート機能等で一行読み込んでインサート・・・という処理を書くときに恐らく
foreach等を使って行数分、処理を実行させるかと思うのですが、

処理例)

import.php
// CSVから読み込んだ行数分saveを行う
foreach ($csvList as $attributes) {
    $this->fill($attributes)->save();
}

その時にsaveメソッドを使ってるとデータが一行しか入らないという現象に遭遇します。
(具体的にはCSVの場合、最終行のデータしか入っていないようになってるはず)

原因

それもそのはずで、リーダブルに書いてある通り、
saveメソッドを使うときはnewしてから使用しないと同じインスタンスを何回もsaveする、という動きになってしまいます。

Eloquent:利用の開始 5.4 Laravel

モデルから新しいレコードを作成するには新しいインスタンスを作成し、saveメソッドを呼び出します。

なのでsaveメソッドを使うときは必ずnewしてから使用するか、createメソッドを使用するようにしましょう

ということでした。

createメソッドを使用する場合は必ず$fillable$guarded を指定すること!

参考

14
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
6