今回もなんかうまいこといかなかったのでネタにしてみました~
Table of Contents
概要
ほい、今回はLaravelを使っている時に配列で保存しているデータを保存したかったんです。
しかも配列の為複数レコードを保存することになるのでforeachを利用することにしました。
しかし!レコードがうまく保存されなかったのでそれを解決しちゃおう!ってことですね。
解決したい課題: foreachで複数レコードを保存したい。
今回やりたいことは配列に入ったデータを保存したい。
レコードは複数になるので、配列をforeachで回して配列に入っている分だけ保存する!というやつですね。
userテーブル
id | name |
---|---|
1 | 牛島 |
2 | 高橋 |
このテーブルにレコードを追加していきたい!
それが以下のコードで対応してみようとした。
use App\Models\User;
public function index()
{
$names = ["山田", "鈴木", "田中"];
//インスタンスを作成
$user = new User();
//名前をほぞん
foreach ($names as $name){
$user->name = $name;
$user->save();
}
}
Code language: PHP (php)
userテーブルがあるとして、そこにレコードを追加していくイメージ!
しかし。。。
id | name |
---|---|
1 | 牛島 |
2 | 高橋 |
3 | 田中 |
なんか1つのレコードしか追加されてないんやが。。。。
ということで解決させてみましょう!
課題の原因: save()メソッドが…
今回の原因はsave()メソッドに合ったっぽいですね。
挿入
もちろん、Eloquentを使用する状況は、データベースからモデルを取得する必要がある場合だけに限りません。新しいレコードを挿入する必要もあるでしょう。うれしいことに、Eloquentはこれをシンプルにします。データベースへ新しいレコードを挿入するには、新しいモデルインスタンスをインスタンス化し、モデルに属性をセットする必要があります。次に、モデルインスタンスでsave
メソッドを呼び出します。
うん、新しくレコードを追加するにはインスタンス化をいちいちしないといけないっぽいですね。
毎回インスタンス化させるといけるっぽいです。
解決方法: foreachの中でインスタンス化!
では毎度インスタンス化するようなコードを書いていきましょう!
use App\Models\User;
public function index()
{
$names = ["山田", "鈴木", "田中"];
//名前をほぞん
foreach ($names as $name){
//インスタンスを作成
$user = new User();
$user->name = $name;
$user->save();
}
}
Code language: PHP (php)
ほい!これでOKっぽい。
まあ、foreachの中でインスタンス化させただけですけどね。www
id | name |
---|---|
1 | 牛島 |
2 | 高橋 |
3 | 山田 |
4 | 鈴木 |
5 | 田中 |
これで解決だー
まとめ
クリスマスにも技術ブログを更新できたことを光栄に思います。