我有City
模型和Store
模型。
Store
属于City
,我希望单个Store
的网址如下:
/<city-slug>/stores/<store-slug>
示例:
/nyc/stores/macys
这就是我在web.php
:
Route::get('/{city}/stores/{store}', 'StoresController@show')->name('store');
控制器:
public function show($cityId, $storeId)
{
$store = \App\Store::where('slug', $storeId)->first();
return view('stores.show', compact('store'));
}
如果我访问/nyc/stores/macys
它可以正常工作,但如果我用任何其他字符串替换nyc
它也可以。我只想使用/nyc/stores/macys
的网址。我错过了什么?感谢
答案 0 :(得分:0)
我的猜测是因为你只是在商店slug上运行查询。您可以尝试添加另一个where子句。由于Store
属于City
,因此请尝试以下操作:
$city = City::where('slug', $cityId)->whereHas('stores', function ($query) use ($storeId) {
$query->where('slug', $storeId);
})->get();
然后,如果您的City
模型上有一个名为stores
的方法,您可以访问该商店数据并返回类似的内容......
return view('stores.show)->with([ 'store' => $city->stores->first() ]);
我自己还没有测试过这段代码,但希望它可以帮到你。