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

问题描述 投票:1回答:1

我不希望在我的用户表中有重复项。这没关系:

╔═══╦════════════╦═════════════╦═════════════╗
║   ║ 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');
}
php laravel
1个回答
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);

    }

}
© www.soinside.com 2019 - 2024. All rights reserved.