当前位置: 首页 > 知识库问答 >
问题:

Laravel 5.1创建或更新重复

龙浩博
2023-03-14

在Laravel5.1中,对于MySQL insert,我希望查看记录是否已经存在,并在重复时更新,如果不存在,则创建新记录。

我已经搜索了SO,答案是旧laravel版本。在一个旧的主题中,它说去年在core中添加了一个新的updateOrcreate()方法。但是当我尝试时,我得到了错误:

Integrity constraint violation: 1062 Duplicate entry '1' for key 'app_id' 

这是我使用的查询:

AppInfo::updateOrCreate(array(
    'app_id' => $postData['appId'],
    'contact_email' => $postData['contactEmail']
));

其中,app_id是该表中唯一的外键,我想更新记录(如果存在)或创建一个新记录。我尝试搜索5.1文档,但找不到我需要的信息。有人能带我到这里吗。。。

共有3个答案

柴泰平
2023-03-14

我创建了一个在重复密钥上使用MySQL insert的包。

它可能对其他人有用:

https://packagist.org/packages/yadakhov/insert-on-duplicate-key

例子:

/**
 * Class User.
 */
class User extends Model
{
    use Yadakhov\InsertOnDuplicateKey;
    ...
}

// associative array must match column names
$users = [
    ['id' => 1, 'email' => 'user1@email.com', 'name' => 'User One'],
    ['id' => 2, 'email' => 'user2@email.com', 'name' => 'User Two'],
    ['id' => 3, 'email' => 'user3@email.com', 'name' => 'User Three'],
];

User::insertOnDuplicateKey($users);
姬昊焱
2023-03-14

我回答这个问题是因为我找不到任何关于重复密钥更新的答案,尽管我使用的是Laravel 5.4。如果查看Laravel核心代码中的updateOrCreate方法,您将看到Laravel使用了两个不同的查询:一个用于更新,另一个用于创建。因此,有时您可以在数据库中获得重复的数据。因此,在某些情况下,编写这种原始查询可能很有用:

DB::语句(“插入到表名中”(列1列2)值(?,)在重复密钥更新时,([val_1,val_2]);

希望它能对别人有用。

海岳
2023-03-14

根据雄辩的模型方法“updateOrCreate()”的定义

函数更新或创建(数组$属性,数组$值 = []){}

这需要两个论点。。。

  1. 一个是属性,如果记录存在,您要检查数据库中的属性
  2. 第二个是要创建或更新的新属性值
AppInfo::updateOrCreate(['app_id' => $postData['appId']],
                        ['contact_email' => $postData['contactEmail']]);
 类似资料:
  • 目前,我正在用一个查询检查该项是否存在,然后使用put或updateItem,我想更改它并对DDB进行一次调用。我想进行一个将更新或创建项目的查询。 下面是我的项目的一个例子: 项目类型: 如果项目存在,我想推送一个新项目,比如{papa:'dsfadsf'}(永远不要修改fa映射内的现有项目),并修改pa映射内的finish值 这是更新后的项目: 这是我尝试的,但不起作用

  • 问题内容: 我有一个条件,即StringBuilder会不断存储与大型平面文件(100兆字节)中的模式匹配的行。但是,达到条件后,我将StringBuilder变量的内容写入文本文件。 现在我想知道是否应该通过重置对象->使用相同的变量 要么 请提出就性能和OOM问题而言您认为哪个更好。 问题答案: 我认为通话仍然很昂贵,您应该这样做: 重置它。 更新: 查看完 源代码后 ,似乎完整保留了旧缓冲区

  • 问题内容: 我是Elasticsearch的新手,目前正在实现用于搜索的过滤器。到目前为止,我的索引具有以下映射(我已经删除了一些字段): geo_distance字段将在location字段上实现,示例实例如下所示: 即采用geoJSON格式。 我了解我将必须更新索引,以使location字段的类型为,如文档(mapping-geo- point )中所述。似乎我必须删除索引并创建一个新索引,但

  • 对于一个小的新项目,我决定尝试一下JDBI(通常我使用hibernate/jpa)。 我喜欢使用@SqlUpdate/@Sql Query创建轻量级、基于注释的dao。 但是:在某些情况下,我无法确定是要创建实体还是更新现有实体。我会放置一个“选择”语句,并根据其返回值使用插入或更新语句。 问题:jdbi中的“仅接口”道是否以某种方式支持这一点?还是我必须自己编写一个“createOrUpdate

  • 问题内容: 我想创建一个模型对象,例如Person,如果不存在person的id,否则我将获得该person对象。 创建新人员的代码如下: 但是我不知道在哪里检查并获取现有的人对象。 问题答案: Django中已经有一个,https://docs.djangoproject.com/en/dev/ref/models/querysets/#get- or-create 对你来说可能是:

  • 是否可以使用Java中的任何开源工具或API在jira中导入excel/csv文件(其中包含jira问题的详细信息,如标题、描述、类型、优先级)? 它应该记录小时数并更新评论。 编辑:我不想上传excel文件,而不是我想使用excel/csv文件上传在jira上创建/更新问题。