【问题标题】:Laravel update if not exists (duplicate check)如果不存在 Laravel 更新(重复检查)
【发布时间】:2018-06-10 17:44:50
【问题描述】:

我不想在我的 users 表中出现重复项。这样就好了:

╔═══╦════════════╦═════════════╦═════════════╗
║   ║ firstname  ║ lastname    ║ dateOfBirth ║
╠═══╬════════════╬═════════════╬═════════════╣
║ 1 ║ John       ║ Mat         ║ 1999-12-01  ║
║ 2 ║ Dave       ║ Bittner     ║ 1950-06-02  ║
║ 3 ║ John       ║ Mat         ║ 1900-11-02  ║
╚═══╩════════════╩═════════════╩═════════════╝

在我的 Laravel 应用程序 (UserController) 中,我通过调用 firstOrCreate 方法(创建新用户)检查用户是否已经存在:

public function store(UserRequest $request) {

   $user = User::firstOrCreate([
        'firstname'             => request('firstname'),
        'lastname'              => request('lastname'),
        'dateOfBirth'           => request('dateOfBirth'),
    ]);

    if($user->wasRecentlyCreated) {
        // new
    }else {
        // existing
    }

    return redirect('/users');
}

这工作得很好。现在,我可以成功创建一个类似的用户(如上例表中带有id=3 的条目)。如果我将条目 3 中的生日编辑为 1999-12-01,Laravel 说没问题,但不是(与 id=1 重复)!

如果条目已经存在,我还想检查更新(每次更新后重复检查)。我正在搜索 updateIfNotDuplicate 方法或类似的方法(例如 firstOrCreate 以获取更新)。

这是我在UserController 中的update 函数:

public function update(User $user, UserRequest $request) {
    $user->update([
        'firstname'             => request('firstname'),
        'lastname'              => request('lastname'),
        'dateOfBirth'           => request('dateOfBirth'),
    ]);

    return redirect('/users');
}

【问题讨论】:

标签: php laravel


【解决方案1】:

你可以试试这个

public function update(User $user, UserRequest $request) {

    $update = [
        'firstname'             => request('firstname'),
        'lastname'              => request('lastname'),
        'dateOfBirth'           => request('dateOfBirth'),
    ];

    // find if your updated user already exists 
    $new_user = $user->firstOrNew($update);

    // Update if the no changes has been made or if no user have been founded
    if($new_user->id == $user->id OR !$new_user->exists){
        $user->update($update);

    }

}

【讨论】:

  • 谢谢!您需要将!$new_user->exists() 更改为!$new_user->exists (stackoverflow.com/a/41082793/2056125)。在此之后,工作得很好。非常感谢这个解决方案!
猜你喜欢
  • 2022-10-13
  • 2019-02-06
  • 2019-10-17
  • 2012-12-13
  • 2011-11-05
  • 2016-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多