具有两个属性的Laravel Routing URL

时间:2017-09-19 03:16:22

标签: php laravel laravel-5

我有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的网址。我错过了什么?感谢

1 个答案:

答案 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() ]);

我自己还没有测试过这段代码,但希望它可以帮到你。