Php Laravel雄辩更新或使用预填充模型创建
在整个代码中,我通过从API调用中获取数据来填充一个雄辩的模型。填充模型后,我会保存它,但它可能存在于数据库中(主ID) 这样填充模型似乎很愚蠢:Php Laravel雄辩更新或使用预填充模型创建,php,database,laravel,eloquent,Php,Database,Laravel,Eloquent,在整个代码中,我通过从API调用中获取数据来填充一个雄辩的模型。填充模型后,我会保存它,但它可能存在于数据库中(主ID) 这样填充模型似乎很愚蠢: $lead = new Lead; $lead->id = '123'; $lead->name = 'Tom'; $lead->address = '121 main st'; 然后必须执行此操作才能使用updateOrCreate: $lead = Lead::updateOrCreate( ['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();
但当然,这不起作用,因为如果潜在客户不存在,您将返回一个空对象,并且无法从空值创建默认对象。在第二个代码中,您正在覆盖
$lead
。您需要的是firstOrNew()
您也可以尝试使用此方法:
if(!$lead = Lead::find(123)) {
$lead = new Lead();
$lead->id = 123;
}
$lead->name = 'Tom';
$lead->address = '121 main st';
$lead->save();
您可以先尝试获取对象:
$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
的情况下动态添加,这样aynber的解决方案可以正常工作,但您的逻辑对我来说似乎很奇怪。在运行updateOrCreate之前填充新模型有什么意义
只需对请求数据使用updateOrCreate:
$lead = Lead::updateOrCreate(
['id' => '123'],
[
'name ' => 'Tom',
'address ' => '121 main st',
]
);
为什么要插入主键?它不应该是自动递增的吗?要检查它是否存在,请像您一样使用
find()
函数。那么,你需要其他条件才能完成剩下的工作。为什么你需要这两个条件呢?我不明白为什么您的第一个代码块是必需的/这就是我要找的。但是我相信您需要这样做:$lead=lead::firstOrNew(['id'=>'123']);
$lead = Lead::updateOrCreate(
['id' => '123'],
[
'name ' => 'Tom',
'address ' => '121 main st',
]
);