2017-08-10 68 views
0

我正在制作图片库。图像与标签有多对多的关系。图像也与类别有多对多的关系。Laravel 5.4关系路径绑定

$images = $category->images; 
$images = $tag->images; 

public function images(Category $category = null) 
{ 
    $images = $category->images; 

    return view('pages.images.index', compact('images')); 
} 

路径模型,在此代码绑定工作正常,我可以做同样的标签,但我所希望做的是对的类别过滤器,然后标记。

$images = $tag->category->images; 

例如,如果我有一个带有“dog”标签和“brown”类别的图像,查询将只返回所有棕色的狗。

我可以这样做吗?这两个标签和分类可以有多种选择,所以我希望像这样的路线......

mysite.com/images/{category}/{tag}

感谢任何帮助或去最好的方向。

回答

0

你可以在laravel使用构建whereHas功能

Image::whereHas('categories', function ($query) use ($category) { 
    $query->where('NAME', '=', $category); 
})->whereHas('tags', function ($query) use ($tag) { 
    $query->where('NAME', '=', $tag); 
})->get(); 

与要筛选所需的字段替换名称。

+0

谢谢!这个查询很好。我可以通过路由绑定mysite.com/images/{tag}的“标签”,然后?category = brown传入过滤器。你知道一种方式,我可以通过这样的路线吗? mysite.com/images/{tag}/{category} – briodev

0

您可以按照您的说明声明路线,然后将它们用作连接到路线的控制器方法中的参数。

所以,如果你喜欢声明一个Route::get('/register/{token1}/{token2}','[email protected]');路线则有可能获得在法确认这些通配符就像正常的参数: public function confirm(Request $request, $token1, $token2) {}

+0

非常棒!以为我尝试过没有成功。可能干扰路由绑定,或者可能因为我没有参数中的请求$请求。无论如何,谢谢你和@MrChrissss的帮助!两个答案的组合让我在那里。 – briodev