Laravel 5.2一次插入数组并更新(如果存在)
我试图一次插入一个数组,我还想更新(如果存在)。但是我得到这个错误。Laravel 5.2一次插入数组并更新(如果存在)
$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);
您需要创建一个模型来使用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'];
这是什么让它更新,如果存在? –
对不起,我错过了那部分,我更新了我的代码,它更新了现有模型或创建了新模型。 –
这是不是只是一次插入一行?是不可能插入整个数组? –
您可以使用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)
。
为什么从'FbPosition'模型调用'table()'方法?为什么不使用'DB'外观? – Rifki
@Rifki这是正确的,但我如何检查是否存在? –