我正在尝试一次插入一个数组,如果存在,我还想更新。但我得到了这个错误。
$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);
答案 0 :(得分:5)
您可以使用updateOrCreate()
方法,假设您有$jobs
变量中的作业列表:
foreach($jobs as $job) {
MyModel::updateOrCreate(['title' => $job['title']], $job);
}
就像告诉Laravel一样,如果已经存在指定title
的作业,请更新它。否则将新作业保存到数据库。
如果您获得批量分配例外,您必须定义$fillable
列,因为@AlexeyMezenin说。
如果需要,可以在模型上创建一个新的静态方法:
class MyModel extends Model
{
...
public static function bulkInsertOrUpdate(array $jobs)
{
foreach($jobs as $job) {
static::updateOrCreate(['title' => $job['title']], $job);
}
}
}
然后您可以在控制器中拨打MyModel::bulkInsertOrUpdate($jobs)
。
答案 1 :(得分:0)
您需要创建一个模型才能使用mass assignment功能:
$customerPosition = CustomerPosition::firstOrNew(['id' => $id]);
$customerPosition->fill($jobs)->save();
或此快捷方式 - updateOrCreate()
两者都只会更新或插入一个模型。
此外,要使用质量分配功能,请将要保存的所有属性添加到$fillable
数组中:
class CustomerPosition extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['title', 'full_desc', 'to_date', 'ad_type'];