繁体   English   中英

在现有记录上跳过,否则插入数据Laravel Eloquent

[英]On existing record skip otherwise insert data Laravel Eloquent

我有以下表格结构,这些结构是我从API动态播种的

public function up() {
    Schema::create('reports', function(Blueprint $table) {
        $table->engine = 'InnoDB';
        $table->increments('id');
        $table->integer('program_id')->unique();
        $table->date('date');
        .
        .
        .
        $table->timestamps();
    });

在每个API请求中,我都返回一个数据数组,并尝试将主题保存在上表中。 如果program_id存在,我想忽略这些记录并保存新记录。 我一直在环顾四周,但找不到最佳方法来验证检索数组中的特定值

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '528027827' for key 'reports_program_id_unique

保存记录的方式

// $datas are the field datas from API
foreach ($datas as $data) 
{
      $report = \Td\Reports\Reports\Reports::firstOrCreate($data);
}

如何跳过对现有program_id的插入并仅插入新的?

您可以使用firstOrCreate()

$data = ['program_id' => 528027827, ...];

$report = Report::firstOrCreate($data);

您遇到的问题是您要指定program_id为唯一的,然后发送一个数组,该数组的数据具有相同的program_id

您需要从数据库中删除unique键,从数组中删除重复键,或者如果program_id是主键,则可以通过设置protected $primaryKey = 'program_id';在模型上进行设置protected $primaryKey = 'program_id';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM