简体   繁体   中英

How to delete records based on the multiple where conditions as an array in laravel

I am searching in docs and in the stack exchange for days that, is there any way that I can actually pass an array with multiple conditions in it to delete the record in the Laravel 4.2?

I want to achieve something like below

DELETE FROM `employees` WHERE user_id = 5 AND dept_id = 5

For this can I do something like below?

$whereArray = array('user_id'=>5,'dept_id'=>5);

return DB::table('employees')->where($whereArray)->delete();

I know I can use multiple where conditions to achieve this. But for every time a new condition arrives I have to rewrite the function. And also I cannot use this function as dynamic one.

So please help me this? How can achieve this using the array?

You can't directly pass in the array, but you could process the array:

$whereArray = array('user_id' => 5,'dept_id' => 5);

$query = DB::table('employees');
foreach($whereArray as $field => $value) {
    $query->where($field, $value);
}
return $query->delete();

This functionality can be extracted out into a function, or even a model scope, that accepts your array and builds and returns the query to you.

For example, if you have an Employee model:

class Employee extends Eloquent {

    public function scopeWhereArray($query, $array) {
        foreach($array as $field => $value) {
            $query->where($field, $value);
        }
        return $query;
    }

}

Then you could do:

$whereArray = array('user_id' => 5,'dept_id' => 5);

return Employee::whereArray($whereArray)->delete();

Edit

If you wanted to be able to supply the operator, as well, you'd just need to change the format of your array:

$whereArray = array(
    array(
        'field' => 'user_id',
        'operator' => '=',
        'value' => 5
    ),
    array(
        'field' => 'dept_id',
        'operator' => '=',
        'value' => 5
    ),
    array(
        'field' => 'salary',
        'operator' => '<',
        'value' => 5000
    )
);

return Employee::whereArray($whereArray)->delete();

And you would need to update your function:

class Employee extends Eloquent {

    public function scopeWhereArray($query, $array) {
        foreach($array as $where) {
            $query->where($where['field'], $where['operator'], $where['value']);
        }
        return $query;
    }

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM