[英]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.