我正在尝试做一些像自动建议,见下面的代码。
//search suggestion base on the string criteria given
public function search_tag(Request $request){
$tags = tags::where(function($query){
foreach(item_tags::where('item_id',$request->item_id)->get() as $i){ //this is the line 192
$query->orWhere('tag_id','!=',$i->tag_id);
}
})->where('tag_name','LIKE','%'.$request->ss.'%')->get();
return response()->json([ 'success' => true, 'tags' => $tags, 'ss' => $request->ss ]);
}
但是它给了我这个错误
ItemsController.php第192行出错:未定义变量:请求
你可以看到有一个'$request'变量
public function search_tag(Request $request){
但是为什么它告诉我'request'变量是未定义的?有什么想法吗?
在闭包中,您使用的是不可用的$request,因此您需要通过use方法传递$request
public function search_tag(Request $request){
$tags = tags::where(function($query) use ($request) {
foreach(item_tags::where('item_id',$request->item_id)->get() as $i){ //this is the line 192
$query->orWhere('tag_id','!=',$i->tag_id);
}
})->where('tag_name','LIKE','%'.$request->ss.'%')->get();
return response()->json([ 'success' => true, 'tags' => $tags, 'ss' => $request->ss ]);
}
将$request
变量传入闭包:
where(function($query) use ($request) {
http://php.net/manual/en/functions.anonymous.php闭包也可以从父作用域继承变量。任何这样的变量都必须传递给
use
语言结构。
这是一个闭包,并且该请求在此范围内未知,请尝试以下操作:
//search suggestion base on the string criteria given
public function search_tag(Request $request) use ($request){
$tags = tags::where(function($query) use {
foreach(item_tags::where('item_id',$request->item_id)->get() as $i){ //this is the line 192
$query->orWhere('tag_id','!=',$i->tag_id);
}
})->where('tag_name','LIKE','%'.$request->ss.'%')->get();
return response()->json([ 'success' => true, 'tags' => $tags, 'ss' => $request->ss ]);
}
如果你想在闭包中使用变量,那么你必须在use()内写入。
$tags = tags::where(function($query) use ($request){
foreach(item_tags::where('item_id',$request->item_id)->get() as $i){ //this is the line 192
$query->orWhere('tag_id','!=',$i->tag_id);
}
})->where('tag_name','LIKE','%'.$request->ss.'%')->get();