首页 > 解决方案 > Laravel Eloquent updateOrCreate 使用预填充模型

问题描述

在整个代码中,我通过从 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();

但当然,这不起作用,因为如果潜在客户不存在,您将返回一个空对象,并且无法从空值创建默认对象。

标签: phpdatabaselaraveleloquent

解决方案


在第二个代码中,您将覆盖$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();

推荐阅读