35042


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

[code]

    <?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();
            }
        }
    }
    
[/code]


CC BY-SA 3.0
2017-03-27T09:12:19.797
33573
2020-01-09T23:01:20.173
18697
question
laravel
Laravelでの一括インサート


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

[code]

    $data = array(
        array('name'=>'Coder 1', 'rep'=>'4096'),
        array('name'=>'Coder 2', 'rep'=>'2048'),
        //...
    );
    
    User::insert($data);
    
[/code]

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

[code]

    $id = DB::table('users')->insertGetId(
        ['email' => 'john@example.com', 'votes' => 0]
    );
    
[/code]


CC BY-SA 3.0
2017-03-28T07:04:40.963
33602
2017-03-28T07:04:40.963
21211
33573
answer


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

[code]

    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();
            }
        }
    }
    
[/code]


CC BY-SA 3.0
2017-05-26T10:54:59.130
35042
2017-05-26T10:54:59.130
13404
33573
answer