我不想在我的用户表中添加重复项。这没关系:
╔═══╦════════════╦═════════════╦═════════════╗
║ ║ 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');
}
答案 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);
}
}