私はユーザテーブルに重複したくないです。これは、[OK]を次のようになります。Laravel更新が存在しない場合(重複チェック)
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');
}
これはかなり働いていた:私のLaravelアプリケーション(UserController
)で
╔═══╦════════════╦═════════════╦═════════════╗
║ ║ firstname ║ lastname ║ dateOfBirth ║
╠═══╬════════════╬═════════════╬═════════════╣
║ 1 ║ John ║ Mat ║ 1999-12-01 ║
║ 2 ║ Dave ║ Bittner ║ 1950-06-02 ║
║ 3 ║ John ║ Mat ║ 1900-11-02 ║
╚═══╩════════════╩═════════════╩═════════════╝
ユーザーがすでにfirstOrCreate
メソッド(新しいユーザーの作成)を呼び出すことによって存在している場合、私がチェックしていますよく今、私は同様のユーザーを成功させることができます(上の例の表の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');
}
を試すことができます)なぜ、あなたは 'UserRequest'オブジェクトを持って – Sark
あなたの問題を解決します'dateOfBirth'カラムに' unique'制約を追加しないでください。 – Ohgodwhy
@Ohgodwhy:誕生日は同じだが名前の異なる2人のユーザーが存在する可能性もあります。私はMCVEを作成しようとしました。私の本当のテーブルははるかに大きいです。 idフィールドの代わりにhole-table-composite-keyとして見ることができます。 – Pengxer