$key
是一个变量可以是空的或什么的。
var key='"<?php echo $_REQUEST['key']; ?>"';
然后通过数据发送到ajax
"ajax": {
"url": "{{asset("try")}}",
"type": 'POST',
"dataType": 'json',
"async": true,
"data": {
key : key,
},
}
试试控制器
public function try(Request $request){
$key=$request->key;
DB::query()
->select('A.id','A.upper_p_id','A.key')
->from('users as A')
->leftjoin('products as B', function($join) {
$join->on('A.ID', '=', 'B.p_id');
})
->groupBy('A.id','A.upper_p_id','A.key')
->where('A.key', 'LIKE', '%'.$key.'%');
->get()
return $result;
}
我从查询调试工具中获取了错误表达式?
LIKE '%\"\"%'
但是,如果我使用
->where('A.n_geography','LIKE', '%'.''.'%');
它是来自查询调试工具的正确句子。
LIKE '%%'
好吧 - 你确实在key
变量中加入双引号......所以它正确地做了:-)
如果你试图从请求获取密钥,理想情况下你不应该使用$ _GET o $ _POST。
public function getData(Request $request){
$key = $request->key;
$records = DB::table('users')
->leftJoin('products', 'users.id', '=', 'products.p_id')
->groupBy('users.id','users.upper_p_id','users.key')
->where('users.key', 'LIKE', '%'.$key.'%')
->select('users.id','users.upper_p_id','users.key')
->get();
return response()->json($records, 200);
}
但是,如果key
变量是一个javascript变量,那么你不能直接在控制器中使用。您需要以某种方式在路由参数或使用ajax请求中传递它。
其次,如果你可以添加条件when
,如果$ key存在,那么只做一个where子句:
public function getData(Request $request){
$key = $request->key;
$records = DB::table('users')
->leftJoin('products', 'users.id', '=', 'products.p_id')
->groupBy('users.id','users.upper_p_id','users.key')
->when($key, function($q) use($key){
return $q->where('users.key', 'LIKE', '%'.$key.'%');
})
->select('users.id','users.upper_p_id','users.key')
->get();
return response()->json($records, 200);
}
你是双引key
。建议的将PHP变量作为JS变量共享的方法是对JSON进行编码,例如:
var key= {!! json_encode(request()->input('key')) !!};
请注意,JS代码中没有必要的引号,因为有效的JSON也是一个有效的JS变量。
另请注意,由于您使用的是Laravel,因此建议您使用刀片标记和request()
帮助程序来访问请求参数
为了防止SQL注入,最好不要直接连接值,而是将其作为参数传递,所以试试这个:
$key = $request->key;
...
->whereRaw('A.key like ?', ['%' . $key . '%']);
在你的JS中:
var key='<?php echo $_REQUEST['key']; ?>';