Laravel 5.2一次插入一个数组并更新(如果存在)

Edv*_*erg 0 php laravel eloquent laravel-5

我正在尝试一次插入一个数组,我也想要更新,如果存在.但是我得到了这个错误.

$jobs = array();

//Iterate over the extracted links and display their URLs
foreach ($links as $link){

        $data = get_job_info($link);

        $jobs[] = [
            'title' => $data['title'],
            'full_desc' => $data['desc'],
            'to_date' => $data['date'],
            'ad_type' => 'fb'
        ];

    }
}

DB::table('customer_position')->insert($jobs);
Run Code Online (Sandbox Code Playgroud)

Rif*_*fki 5

你可以使用updateOrCreate()方法,假设你有$jobs变量中的作业列表:

foreach($jobs as $job) {
    MyModel::updateOrCreate(['title' => $job['title']], $job);
}
Run Code Online (Sandbox Code Playgroud)

就像告诉Laravel,如果title已经存在指定的作业,请更新它.否则将新作业保存到数据库.

如果你得到质量分配异常,你必须将$fillable列定义为@AlexeyMezenin说.

如果需要,可以在模型上创建一个新的静态方法:

class MyModel extends Model
{
    ...

    public static function bulkInsertOrUpdate(array $jobs)
    {
        foreach($jobs as $job) {
            static::updateOrCreate(['title' => $job['title']], $job);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以打电话给MyModel::bulkInsertOrUpdate($jobs)你的控制器.