如何在laravel中删除基于多个where条件的记录作为数组


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

我在文档和堆栈交换中搜索了好几天,有没有办法真正传递一个包含多个条件的数组来删除Laravel 4.2中的记录?

示例

我想实现以下目标

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

为此,我可以做下面这样的事情吗?

$whereArray = array('user_id'=>5,'dept_id'=>5);
return DB::table('employees')->where($whereArray)->delete();

我知道我可以使用多个where条件来实现这一点。但每次出现新的条件时,我都必须重写函数。而且我不能把这个函数当作动态函数。

所以请帮我这个?如何使用阵列实现这一点?

不能直接传入数组,但可以处理数组:

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

此功能可以提取到一个函数中,甚至可以提取到模型范围中,该函数接受您的数组并构建并向您返回查询。

例如,如果您有一个Employee型号:

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

然后你可以做:

$whereArray = array('user_id' => 5,'dept_id' => 5);
return Employee::whereArray($whereArray)->delete();

编辑

如果你也想提供操作符,你只需要改变数组的格式:

$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();

你需要更新你的功能:

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