我有以下表结构,我从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上跳过插入并只插入新的?
答案 0 :(得分:1)
您可以使用firstOrCreate()
:
$data = ['program_id' => 528027827, ...];
$report = Report::firstOrCreate($data);
答案 1 :(得分:0)
您遇到的问题是,您需要将DataBindingComplete
指定为唯一,然后发送包含相同program_id
您需要从数据库中删除program_id
密钥,从阵列中删除重复项,或者如果unique
是主键,请通过设置program_id
在模型上设置它