Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel - Eloquent multiple delete vs destroy array

I was wondering what's the best way to destroy multiples database entries with ELOQUENT and I don't find a way to determine that.

So I have 3 array of id's (2 with ints, 1 with strings). Is it better to go with a foreach and ->delete() every entry or destroy the array ?

When I look at the destroy function, it states the following :

We will actually pull the models from the database table and call delete on each of them individually so that their events get fired properly with a correct set of attributes in case the developers wants to check these.

And the code clearly shows :

$key = $instance->getKeyName();

foreach ($instance->whereIn($key, $ids)->get() as $model) {
    if ($model->delete()) {
        $count++;
    }
}

So I guess there's no real difference and the destroy function is just to avoid the use of a foreach. Can anyone confirm or inform and explain ?

Thanks :)

like image 297
MTH Avatar asked Sep 01 '25 10:09

MTH


1 Answers

At first you need to know the difference between destroy and delete, destroy is think to be used for removing an entity (object/model) and delete for being used on a query builder.

Both are different ways but they have the same purpose you can do like:

Model::destroy(array(1, 2, 3));

or

$ids = explode(",", [1,2,3]);
$model->find($ids)->each(function ($model, $key) {
    //Do things before deleting 
    $model->delete();
});

But as you can see the first one is just more direct, on the second one you can do custom things before deleting.

like image 100
Troyer Avatar answered Sep 04 '25 03:09

Troyer