Sallar Mumtaz
Sallar Mumtaz

Reputation: 3

Laravel delete not working with skip and take

I am having trouble deleting the relation model records, I want to keep some records and delete all others, for example, there is x number of records in the table now I want to keep the first five and delete all others. I am using skip and take to filter the records.

$quiz->questions()->latest()->skip($request->total_questions)->take(PHP_INT_MAX)->each(function ($row) {
    $row->options()->delete();
    $row->delete();
});

I have a model quiz that has related questions and questions have other relation options so what I won't do is keep some questions like 5 or 6 maybe and delete all other questions with their options but in this query, all questions related to the quiz are deleted.

P.s when I use to get() it shows me the correct result which I want but I don't know why it is not working with delete()!

Please help anyone.

Upvotes: 0

Views: 387

Answers (1)

Abdullah Shakir
Abdullah Shakir

Reputation: 223

You have to add get() after take() as following:

$quiz->questions()->latest()->skip($request->total_questions)->take(PHP_INT_MAX)->get()->each(function ($row) {
    $row->options()->delete();
    $row->delete();
});

Upvotes: 1

Related Questions