Laravel 5.5 对枢轴数组进行筛选
Laravel 5.5 Filter on Pivot Array
我的要求URL:
http://localhost:8000/api/get-filter-places/z/11,18
没问题查询
$kitchen = $request->kitchen;
$places = Place::where('name', 'like', '%' . $request->name . '%')
->whereHas('eatCategories', function($q) use($kitchen){
$q->whereIn('eat_category_id', [11,18]);
})->get();
当我写 $ kitchen 而不是 11,18 时,它只能作为 11 使用。
我的模型:
public function eatCategories(){
return $this -> belongsToMany('App\EatCategory', 'eat_category_pivots');
}
这不起作用:
$kitchen = $request->kitchen;
$places = Place::where('name', 'like', '%' . $request->name . '%')
->whereHas('eatCategories', function($q) use($kitchen){
$q->whereIn('eat_category_id', [$kitchen]);
})->get();
您需要将代码更改为:
$q->whereIn('eat_categories.id', $kitchen);
此外,您需要在 URL 中使用 .
之类的不同字符来代替 ,
才能使其生效:
http://localhost:8000/api/get-filter-places/z/11.18
然后只需使用explode
将字符串转换为数组:
$kitchen = explode('.', $request->kitchen);
像这样使用分隔符 |
http://localhost:8000/api/get-filter-places/z/11|18
试试这个:
$kitchen = explode('|', $request->kitchen);
$places = Place::where('name', 'like', '%' . $request->name . '%')
->whereHas('eatCategories', function($q) use($kitchen){
$q->whereIn('eat_category_id', $kitchen);
})->get();
我是这样解决的
$kitchen = $request->kitchen;
$kitchen = explode(',', $request->kitchen);
$places = Place::where('name', 'like', '%' . $request->name . '%')
->whereHas('eatCategories', function($q) use($kitchen){
$q->whereIn('eat_category_id', $kitchen);
})->get();
我的要求URL:
http://localhost:8000/api/get-filter-places/z/11,18
没问题查询
$kitchen = $request->kitchen;
$places = Place::where('name', 'like', '%' . $request->name . '%')
->whereHas('eatCategories', function($q) use($kitchen){
$q->whereIn('eat_category_id', [11,18]);
})->get();
当我写 $ kitchen 而不是 11,18 时,它只能作为 11 使用。
我的模型:
public function eatCategories(){
return $this -> belongsToMany('App\EatCategory', 'eat_category_pivots');
}
这不起作用:
$kitchen = $request->kitchen;
$places = Place::where('name', 'like', '%' . $request->name . '%')
->whereHas('eatCategories', function($q) use($kitchen){
$q->whereIn('eat_category_id', [$kitchen]);
})->get();
您需要将代码更改为:
$q->whereIn('eat_categories.id', $kitchen);
此外,您需要在 URL 中使用 .
之类的不同字符来代替 ,
才能使其生效:
http://localhost:8000/api/get-filter-places/z/11.18
然后只需使用explode
将字符串转换为数组:
$kitchen = explode('.', $request->kitchen);
像这样使用分隔符 |
http://localhost:8000/api/get-filter-places/z/11|18
试试这个:
$kitchen = explode('|', $request->kitchen);
$places = Place::where('name', 'like', '%' . $request->name . '%')
->whereHas('eatCategories', function($q) use($kitchen){
$q->whereIn('eat_category_id', $kitchen);
})->get();
我是这样解决的
$kitchen = $request->kitchen;
$kitchen = explode(',', $request->kitchen);
$places = Place::where('name', 'like', '%' . $request->name . '%')
->whereHas('eatCategories', function($q) use($kitchen){
$q->whereIn('eat_category_id', $kitchen);
})->get();