我在Laravel查询生成器中遇到问题。当我尝试将包含某种SQL代码的变量绑定到我的绑定参数中时,它不会返回任何结果。如果运行enableQueryLog(),则可以看到查询和绑定正确。因此,该代码提供了很好的查询,但并没有相应地执行。
我已经尝试打印出所有重要的变量。我启用了查询日志,以查看所有设置是否正确。当我将变量直接放入whereRaw()而不绑定时,它可以正常工作。只是没有绑定。
这是我运行的代码:
public function getCarbrands() {
$name = 'name != Ford';
try {
$brands = DB::table('ni_carbrands')
->whereRaw(':name',['name'=>$name])
->select('id','name')
->get();
echo json_encode( array('info' => 1 ,'status' => 'Successfully found car brands', 'details' => $brands));
} catch(Exception $e){
echo json_encode( array('info' => 0 ,'status' => 'Error finding car brands', 'e' => $e));
}
}
我知道绑定功能的这种使用是不必要的,它只是对我想构建的其他一些功能的测试。这是我的查询日志返回的内容:
array:1 [▼
0 => array:3 [▼
"query" => "select `id`, `name` from `ni_carbrands` where :name"
"bindings" => array:1 [▼
0 => "name != Ford"
]
"time" => 190.25
]
]
查询的所有组件似乎都正确,但是似乎在生成它时遇到了一些麻烦。
预期结果将是这样:
{
"info": 1,
"status": "Successfully found car brands",
"details": [
{
"id": 1,
"name": "Toyota"
},
{
"id": 2,
"name": "Fiat"
},
{
"id": 3,
"name": "Iveco"
},
{
"id": 4,
"name": "Citroën"
},
{
"id": 5,
"name": "Opel"
},
{
"id": 6,
"name": "Mercedes"
},
{
"id": 8,
"name": "Volkswagen"
},
{
"id": 9,
"name": "Renault"
},
{
"id": 10,
"name": "MAN"
},
{
"id": 11,
"name": "Nissan"
},
{
"id": 12,
"name": "Hyundai"
},
{
"id": 13,
"name": "Peugeot"
}
]
}
但是实际结果是:
{"info":1,"status":"Successfully found car brands","details":[]}
非常感谢您的帮助。
原始条件不良:whereRaw(':name',['name'=>$name])
就像这样:
$brands = DB::table('ni_carbrands')
->select('id','name')
->whereRaw($name)
->get();
您也可以使用这种类型
$brands = DB::table('ni_carbrands')
->select('id','name')
->where('name', '!=', 'Ford')
->get();
否则,您可以在动态字段中设置条件像
->where($name, '!=', 'Ford')