1

バージョンはLaravel5.4です。
下記の様な形でテーブルに値をインサートしたいのですが、行が上書きされているのか、最後の値しかインサートできません.
Eloquent ORMでこのような処理を書く方法は無いでしょうか?
また、それが無理な場合、どのように記述するのが適切でしょうか.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Image extends Model
{
    protected $table = 'pictures';
    protected $primaryKey = 'id';

    public function storeUrls($urls)
    {
        foreach ($urls as $url) {
            $this->user_id = 'test';
            $this->url = $url;
            $this->save();
        }
    }
}
racode
  • 15
  • 1
  • 4

2 Answers2

0

Eloquent::insert() がいいかもしれないです。
例:

$data = array(
    array('name'=>'Coder 1', 'rep'=>'4096'),
    array('name'=>'Coder 2', 'rep'=>'2048'),
    //...
);

User::insert($data);

AUTOINCREMENTがある場合は下記も参考までに。

$id = DB::table('users')->insertGetId(
    ['email' => '[email protected]', 'votes' => 0]
);
NNNN
  • 33
  • 1
  • 1
  • 5
0

インスタンスを作ってあげると解決できます。

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Image extends Model
{
    protected $table = 'pictures';
    protected $primaryKey = 'id';

    public function storeUrls($urls)
    {
        foreach ($urls as $url) {
            $image = new static();
            $image->user_id = 'test';
            $image->url = $url;
            $image->save();
        }
    }
}
kratos
  • 362
  • 1
  • 7
  • 18