首页 > 解决方案 > 使用 updateOrCreate() 时出现重复条目

问题描述

我正在使用(最新的)流明,这可能是我错误的罪魁祸首。

当我使用 updateOrCreate() 时:

            User::updateOrCreate(
            ['username'     => $user->username],
            [
                'email'         => $user->email,
                'password'      => $user->password,
                'foreign_id'    => $user->foreign_id,                
                'client_id'     => $user->client_id,
                'status'        => $user->active,
                'user_level'    => (integer) $user->user_level
            ]
        );

在我的一个模型上,我得到 mysql 错误:

"SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'user@name.com' for key 'users_username_unique' (SQL: insert into `users` (`username`,

因为它试图为我的唯一列之一(用户名)插入重复值。

所以,函数本身存在,我没有得到任何错误,它适用于第一次插入,但是一旦它达到检查数据库条目是否存在并且只需要更新它的功能,它仍然想要创建新条目,但具有重复值。

Laravel 本身的 Eloquent 中有 updateOrCreate(): https://laravel.com/docs/8.x/eloquent#upserts。Lumen 中的 Eloquent 是否在某种程度上削弱了这个功能?

在查看 Laravel 或 Lumen 的代码时,我找不到这个函数的实现,最接近的是 updateOrFail()...

标签: phplaravellumen

解决方案


User::updateOrCreate(
        [
            'username'     => $user->username,
            'foreign_id'    => $user->foreign_id
        ],

        [
            'email'         => $user->email,
            'password'      => $user->password,                                
            'client_id'     => $user->client_id,
            'status'        => $user->active,
            'user_level'    => (integer) $user->user_level
        ])

// 第一个数组必须包含所有主键/复合键,这使其成为唯一记录


推荐阅读