如果不存在Laravel更新(重复检查)

时间:2017-12-30 18:52:38

标签: php laravel

我不想在我的用户表中添加重复项。这没关系:

╔═══╦════════════╦═════════════╦═════════════╗
║   ║ 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更新)。

这是update中的UserController函数:

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

    return redirect('/users');
}

1 个答案:

答案 0 :(得分: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);

    }

}