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();
可以将此功能提取到函数中,甚至是模型范围中,它接受您的数组并构建 returns 对您的查询。
例如,如果您有一个 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;
}
}
我在文档和堆栈交换中搜索了好几天,有没有什么方法可以实际传递一个包含多个条件的数组来删除 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();
可以将此功能提取到函数中,甚至是模型范围中,它接受您的数组并构建 returns 对您的查询。
例如,如果您有一个 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;
}
}