I'm trying to use updateOrCreate in that case but didn't work. So that's why i'm using this. I'll check database before store data. If there are any records of this user I'll delete that record. If there aren't any records I'll create records. Problem is how to delete if there are any records of User.
public function store(Request $request,Choice $choice){
$time = $request->input('time');
$user = Choice::where('user_id','=',Auth::id())->first();
if ($user === null) {
foreach ($request->input('number') as $key => $value) {
Choice::create([
'user_id' => Auth::id(),
'time' => $time,
'topic_id' => $key,
'question_number' => $value,
]);
}
return redirect()->route('choices.index');
}
else{
$choices = Choice::where('user_id',Auth::id())->orderBy('id')->get()->toArray();
dd($choices);
foreach ($choices as $index) {
$index->delete();
}
foreach ($request->input('number') as $key => $value) {
Choice::create([
'user_id' => Auth::id(),
'time' => $time,
'topic_id' => $key,
'question_number' => $value,
]);
}
return redirect()->route('choices.index');
}
}






Ваша функция будет выглядеть так,
public function store(Request $request,Choice $choice){
$time = $request->input('time');
$choice = Choice::where('user_id','=',Auth::id())->first();
if ($choice === null) {
foreach ($request->input('number') as $key => $value) {
Choice::create([
'user_id' => Auth::id(),
'time' => $time,
'topic_id' => $key,
'question_number' => $value,
]);
}
}
else{
$choices = Choice::where('user_id',Auth::id())->delete();
foreach ($request->input('number') as $key => $value) {
Choice::create([
'user_id' => Auth::id(),
'time' => $time,
'topic_id' => $key,
'question_number' => $value,
]);
}
}
return redirect()->route('choices.index');
}
Если возникнут какие-либо затруднения, не стесняйтесь спрашивать, и я надеюсь, вы понимаете.
Вы спасли мою жизнь. Спасибо, сэр. Но как вы удалили все записи user_id. И он удалит только записи user_id, верно?
просто посмотрите на строку после оператора else, который удалит все варианты выбора текущего пользователя
@SagarGautam избыточный код. Нет необходимости выполнять проверку записей, чтобы удалить их.
@Waleed Если нам нужно удалить все записи, а затем создать новые, тогда ваш ответ будет идеальным, но позже может потребоваться удалить некоторые варианты, сохранив некоторые и добавив новые варианты, тогда нам нужно проверить, существует запись или нет;)
@SagarGautam Затем мы использовали бы предложение WhereNot или NotExist, чтобы предотвратить удаление этого файла, но писать избыточный код нецелесообразно.
Вы можете просто вызвать удаление по идентификатору пользователя, который гарантирует, что если есть предыдущая запись, она будет удалена.
public function store(Request $request,Choice $choice){
$time = $request->input('time');
// delete records which belong to user
Choice::where('user_id', Auth::id())->delete();
// add new records
foreach ($request->input('number') as $key => $value) {
Choice::create([
'user_id' => Auth::id(),
'time' => $time,
'topic_id' => $key,
'question_number' => $value,
]);
}
return redirect()->route('choices.index');
}
почему вы используете dd в противном случае? это просто остановит процесс и еще одну вещь, которую вы используете для удаления в массиве, вам нужно использовать это в красноречивом объекте