2017-09-19 10 views
0

私はCityモデルとStoreモデルを持っています。2つの属性を持つLaravelルーティングURL

StoreCityに属し、私はのようになり、単一のStoreのURLを希望:これは私が持っているものである

/nyc/stores/macys

/<city-slug>/stores/<store-slug>

web.php

Route::get('/{city}/stores/{store}', '[email protected]')->name('store');

コントローラ:私は/nyc/stores/macysにアクセスする場合

public function show($cityId, $storeId) 
{ 
    $store = \App\Store::where('slug', $storeId)->first(); 

    return view('stores.show', compact('store')); 
} 

それは動作しますが、私は他の文字列とnycを交換する場合にも動作します。私は/nyc/stores/macysのURLだけを動作させたいです。私は何が欠けていますか?ありがとう

+0

は、$ cityIdではなく$ storeIdにのみ適用されます。あなたはそれをアクセスを制限するために$ cityIdに同じことを適用することができます –

答えて

0

あなたは店のスラッグでのみクエリを実行しているので、私の推測があります。別のwhere節を追加しようとするかもしれません。あなたはその店のデータにアクセスし、のようなものを返すことができstoresと呼ばれるあなたのCityモデルにメソッドを持っている場合...

return view('stores.show)->with([ 'store' => $city->stores->first() ]); 

Iを次に

$city = City::where('slug', $cityId)->whereHas('stores', function ($query) use ($storeId) { 
    $query->where('slug', $storeId); 
})->get(); 

StoreCityに属しているので、多分、次を試してみてくださいこのコードは自分でテストしていませんが、うまくいけばあなたを助けるかもしれません。

関連する問題