在整个代码中,我通过从API调用获取数据来填充雄辩的模型。在填充完模型之后,我去保存它,但是有可能它可能存在于数据库中(主ID)。
像这样填充模型似乎很愚蠢:
$lead = new Lead;
$lead->id = '123';
$lead->name = 'Tom';
$lead->address = '121 main st';
然后必须执行此操作才能使用updateOrCreate:
$lead = Lead::updateOrCreate(
['id' => $lead->id],
[
'name ' => $lead->name,
'address ' => $lead->address,
]
);
我也尝试过:
$lead = new Lead;
$lead = Lead::find($place);
$lead->id = '123';
$lead->name = 'Tom';
$lead->address = '121 main st';
$lead->save();
但是,这当然不起作用,因为如果线索不存在,您将返回一个空对象,并且无法从空值创建默认对象。
答案 0 :(得分:3)
在第二个代码中,您将覆盖$lead
。您想要的是firstOrNew()
$lead = Lead::firstOrNew(123);
$lead->name = 'Tom';
$lead->address = '121 main st';
$lead->save();
您也可以尝试使用此方法:
if(!$lead = Lead::find(123)) {
$lead = new Lead();
$lead->id = 123;
}
$lead->name = 'Tom';
$lead->address = '121 main st';
$lead->save();
答案 1 :(得分:1)
您可以尝试先获取对象:
$lead = Lead::find($place);
if( is_null($lead) ) {
$lead = new Lead;
}
$lead->name = 'Tom';
$lead->address = '121 main st';
$lead->save();
$lead->save()
在这里适用于新对象和现有对象。
注意::对于新的id
,应动态添加Lead
。
答案 2 :(得分:1)
因此,aynber的解决方案可以正常工作,但是您的逻辑对我来说很奇怪。在运行updateOrCreate之前填充新模型有什么意义?
只需对请求数据使用updateOrCreate:
$lead = Lead::updateOrCreate(
['id' => '123'],
[
'name ' => 'Tom',
'address ' => '121 main st',
]
);