Laravel查询生成器即使绑定正确,也无法正确运行查询
我对Laravel查询生成器有问题。当我尝试将包含某种sql代码的变量绑定到绑定参数中时,它不会返回任何结果。如果运行enableQueryLog(),我可以看到查询和绑定是正确的。因此,代码提供了一个非常好的查询,但它没有相应地执行 我已经试着打印出所有重要的变量。我启用了一个查询日志,以查看是否所有内容都设置正确。当我在whereRaw()中输入变量时,就像它没有绑定一样,它工作得很好。只是没有装订 这是我运行的代码:Laravel查询生成器即使绑定正确,也无法正确运行查询,laravel,laravel-query-builder,Laravel,Laravel Query Builder,我对Laravel查询生成器有问题。当我尝试将包含某种sql代码的变量绑定到绑定参数中时,它不会返回任何结果。如果运行enableQueryLog(),我可以看到查询和绑定是正确的。因此,代码提供了一个非常好的查询,但它没有相应地执行 我已经试着打印出所有重要的变量。我启用了一个查询日志,以查看是否所有内容都设置正确。当我在whereRaw()中输入变量时,就像它没有绑定一样,它工作得很好。只是没有装订 这是我运行的代码: public function getCarbrands() {
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"
}
]
}
$brands = DB::table('ni_carbrands')
->select('id','name')
->whereRaw($name)
->get();
但实际结果是:
{"info":1,"status":"Successfully found car brands","details":[]}
非常感谢您的帮助。恶劣的原始条件:
whereRaw(':name',['name'=>$name])
就这样,
{
"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"
}
]
}
$brands = DB::table('ni_carbrands')
->select('id','name')
->whereRaw($name)
->get();
你也可以用这种
$brands = DB::table('ni_carbrands')
->select('id','name')
->where('name', '!=', 'Ford')
->get();
否则,您可以在动态字段中设置where条件
像
似乎无法绑定包含运算符的字符串。
看看这个 这个呢 这是一个等价的查询
select from ni_carbrands where 'name != Ford'
当然不行,因为你有很多
select from ni_carbrands where name != Ford
引号中的问题您能给出响应代码吗??您在哪里将这些数据添加到详细信息?对不起,我现在提供了整个功能。响应代码是底部提供的信息。我知道它是这样工作的。我在问题中也提到了这一点。问题是,我不希望它像那样工作。更重要的是,我想知道为什么它不能像我那样工作。Bindings变量由
?
标记分隔<代码>':name'你从哪里得到的?变量替换如下->whereRaw(“?”,['name'=>$name])
我从laravel docu和这里的一些帖子中得到了它。另外,我以前尝试过你的方法,但也不起作用。我使用的绑定方法也起作用,只是在这种情况下不起作用。如上所述,我知道这些版本可以工作,而且更容易。我想知道为什么我使用它的方式与whereRaw()不兼容。我之所以想知道这一点,是因为我需要它在其他函数中像那样工作。这只是为了测试目的,因为这个查询非常简单。你是什么意思?Laravel query builder,它将你的输入按原样放在SQL查询的where子句中。将其视为where()函数,其输入参数在插入查询之前不会被处理。WhereRaw:有时您可能需要在查询中使用一个原始表达式如果您访问illumb\Database\Query\Builder,您会发现这个方法可能会帮助您公共函数WhereRaw($sql,array$bindings=[],$boolean='和'){$type='raw';$This->wheres[]=compact('type','sql','boolean'));$this->addBinding($bindings,'where');return$this;}
已经检查过,似乎无法发现问题。正如我所说,构造的查询是100%正确的,但由于某些原因,在幕后出现了一些错误。