Laravel 5.4:将'Where'子句存储在一个变量中
Laravel 5.4: Storing the 'Where' clause in a variable
我想在 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 变量中。这是错误的屏幕截图:
link to the image file
有没有其他方法可以做到这一点。请帮助。
你不能这样做
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 的标准功能可以轻松解决此类任务,您为什么要创建一个单独的静态函数?
Eloquent 示例:
app/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
]);
查询生成器示例:
DB::table('city')->where(['city_id' => $city_id])->update([
'city_name' => $city_name
]);
这比以难以理解的方式做类似事情的函数更容易阅读、理解和支持。
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'],
];
我想在 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 变量中。这是错误的屏幕截图: link to the image file
有没有其他方法可以做到这一点。请帮助。
你不能这样做
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 的标准功能可以轻松解决此类任务,您为什么要创建一个单独的静态函数?
Eloquent 示例:
app/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
]);
查询生成器示例:
DB::table('city')->where(['city_id' => $city_id])->update([
'city_name' => $city_name
]);
这比以难以理解的方式做类似事情的函数更容易阅读、理解和支持。
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'],
];