Laravel 5.6 как удалить, если есть записи пользователя

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');
    }
}

почему вы используете dd в противном случае? это просто остановит процесс и еще одну вещь, которую вы используете для удаления в массиве, вам нужно использовать это в красноречивом объекте

Sagar Gautam 13.08.2018 05:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
1
126
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ваша функция будет выглядеть так,

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, верно?

Ruka Xing 13.08.2018 05:51

просто посмотрите на строку после оператора else, который удалит все варианты выбора текущего пользователя

Sagar Gautam 13.08.2018 05:53

@SagarGautam избыточный код. Нет необходимости выполнять проверку записей, чтобы удалить их.

Waleed 13.08.2018 05:55

@Waleed Если нам нужно удалить все записи, а затем создать новые, тогда ваш ответ будет идеальным, но позже может потребоваться удалить некоторые варианты, сохранив некоторые и добавив новые варианты, тогда нам нужно проверить, существует запись или нет;)

Sagar Gautam 13.08.2018 05:58

@SagarGautam Затем мы использовали бы предложение WhereNot или NotExist, чтобы предотвратить удаление этого файла, но писать избыточный код нецелесообразно.

Waleed 13.08.2018 06:25

Вы можете просто вызвать удаление по идентификатору пользователя, который гарантирует, что если есть предыдущая запись, она будет удалена.

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');

}

Другие вопросы по теме