我想用price过滤一些数据,但当我们回显请求值时,它给出了正确的值,但当我把它放在查询中时,它显示"quot;
我的ajax调用
<script>
$(document).ready(function() {
$("#price_filter").on("change", function() {
var price = this .value;
var _token = $('input[name="_token"]').val();
$.ajax({
url:"{{ route('indexController.pricefilter') }}",
type:"POST",
dataType:"json",
data:{price,_token},
success: function(response){
console.log(response);
// $("#filterdata").html(response);
}
});
})
})
</script>
我的路线
Route::post('indexController/pricefilter','indexController@pricefilter')->name('indexController.pricefilter');
我的功能
public function pricefilter(Request $request){
echo $price = $request->get('price');
return $products = DB::table('products')
->where('price','=', $price)
->tosql();
}
我的查询结果
400
select * from `products` where `price` = ?
它实际上显示为
select * from `products` where `price` = 400
这是结果
array:1 [
0 => array:3 [
"query" => "select * from `products` where `price` <= ?"
"bindings" => array:1 [
0 => "1001"
]
"time" => 3.87
]
]
您看到了问号,因为laravel使用了绑定的参数
从products
中选择*,其中price
=?
当在数据库上执行查询时,将从products
中选择*,其中price
=400
不管怎样:如果你想要你的sql查询及其参数,你可以使用这个函数:
public function getEloquentSqlWithBindings($query)
{
return vsprintf(str_replace('?', '%s', $query->toSql()), collect($query->getBindings())->map(function ($binding) {
return is_numeric($binding) ? $binding : "'{$binding}'";
})->toArray());
}
现在:
public function pricefilter(Request $request){
$query= $products = DB::table('products')
->where('price','=', $price);
echo($this->getEloquentSqlWithBindings($query));
return $query;
}
这对Laravel来说是正常的
要查看真实的数据库查询,可以使用
DB::enableQueryLog();
// and then you can get query log
dd(DB::getQueryLog());
所以你的代码看起来像这个
public function pricefilter(Request $request){
echo $price = $request->get('price');
DB::enableQueryLog();
$products = DB::table('products')
->where('price','=', $price)
->get();
dd(DB::getQueryLog());
return $products;
}