Как удалить записи, основанные на множественных условных выражениях в виде массива в 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();

Я знаю, что могу использовать несколько, где условия для достижения этой цели. Но каждый раз, когда приходит новое условие, я должен переписать функцию. И также я не могу использовать эту функцию как динамическую.

Так, пожалуйста, помогите мне это? Как можно добиться этого с помощью массива?

3

Решение

Вы не можете напрямую передать массив, но вы можете обработать массив:

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

}
9

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]