Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel雄辩更新或使用预填充模型创建_Php_Database_Laravel_Eloquent - Fatal编程技术网

Php Laravel雄辩更新或使用预填充模型创建

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'

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

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

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