2017-08-10 98 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