Я хочу написать динамический запрос на обновление в Laravel, который принимает аргументы и может использоваться во всем проекте.
Следующее — моя функция Контроллера:
public function editquery(Request $request)
{
$city_id = $request->input('city_id');
$city_name = $request->input('city_name');
$tbl = 'city';
$data = ['city_name'=>$city_name];
$wher = ('city_id',1);
General_model::editrecord($data,$wher,$tbl);
return redirect()->action('Admin_controller@cities_page')->with('status','Record Updated Successfully!');;
}
Ниже моя модель функции:
public static function editrecord($data,$wher,$tbl)
{
return DB::table($tbl)->where($wher)->update($data);
}
Единственная проблема здесь в том, что я не могу сохранить значение (‘city_id’, 1) в переменной $ wher. Это скриншот ошибки:
ссылка на файл изображения
Есть ли другой способ сделать это. Пожалуйста помоги.
where
Метод принимает массив условий.
$table = 'city';
$conditions = [
['city_id', '=', '1']
];
$data = ['city_name' => $city_name];
General_model::editRecord($table, $conditions, $data);
// In your model
public static function editRecord($table, $conditions, $data)
{
return DB::table($table)->where($conditions)->update($data);
}
Вы также можете установить несколько условий.
$conditions = [
['city_id', '=', '1'],
['test', '=', 'test'],
];
редактировать
Это по умолчанию where
метод
where($column, $operator = null, $value = null, $boolean = 'and')
Установка четвертого параметра в or
сделаю условие orWhere
,
пример
$conditions = [
['city_id', '=', '1'],
['test', '=', 'test', 'or'],
];
Вы не можете сделать это
public static function editrecord($data,$wher,$tbl)
{
return DB::table($tbl)->where($wher)->update($data);
}
Поскольку, where
это функция; он ожидает 2 или 3 аргумента, а не только 1 аргумент.
Вы должны будете передать оба аргумента так
public static function editrecord($data, $where_column, $where_val, $tbl)
{
return DB::table($tbl)->where($where_column, $where_val)
->update($data);
}
Затем в функции вашего контроллера
$where_column = 'city_id';
$where_val = 1;
General_model::editrecord($data,$where_column,$where_val,$tbl);
Ваш код не совсем в стиле Laravel, зачем вам создавать отдельную статическую функцию, если такие задачи легко решаются стандартными функциями Eloquent / Query Builder?
Красноречивый пример:
Приложение / City.php
<?php
class City extends Model {
protected $table = 'city';
protected $primaryKey = 'city_id';
protected $fillable = ['city_name'];
}
В вашем контроллере:
City::findOrFail($city_id)->update([
'city_name' => $city_name
]);
Пример Query Builder:
DB::table('city')->where(['city_id' => $city_id])->update([
'city_name' => $city_name
]);
Это гораздо легче читать, понимать и поддерживать, чем функции, которые делают подобные вещи непостижимым образом.