【问题标题】:How to delete records based on the multiple where conditions as an array in laravel如何根据多个where条件删除记录作为laravel中的数组
【发布时间】:2015-04-25 16:48:46
【问题描述】:

我在文档和堆栈交换中搜索了几天,有什么方法可以实际传递一个包含多个条件的数组来删除 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 条件来实现这一点。但是每次出现新条件时,我都必须重写函数。而且我不能将此功能用作动态功能。

所以请帮帮我?如何使用数组实现这一点?

【问题讨论】:

    标签: php arrays laravel delete-record


    【解决方案1】:

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

    $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;
        }
    
    }
    

    【讨论】:

    • 谢谢帕特里克斯。我去做。但是还有一个疑问是,如果除了“=”之外还有一些特定的条件,那我们怎么能做到呢?例如,在上面的数组中,还有一个条件,如“salary”
    • @Kiran 我提供了更新。这只是给你一个例子的一种可能性。您可能想要添加更多健全性检查/验证或其他功能,但这应该会给您这个想法。
    • 谢谢帕特里克斯。这有帮助。我将执行相同的操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多