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();