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

时间:2014-09-22 20:54:53

标签: database laravel insert eloquent duplicate-data

我有以下表结构,我从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请求中,我返回一个Data数组,我尝试在上表中保存主题。如果存在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上跳过插入并只插入新的?

2 个答案:

答案 0 :(得分:1)

您可以使用firstOrCreate()

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

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

答案 1 :(得分:0)

您遇到的问题是,您需要将DataBindingComplete指定为唯一,然后发送包含相同program_id

数据的数组

您需要从数据库中删除program_id密钥,从阵列中删除重复项,或者如果unique是主键,请通过设置program_id在模型上设置它