具有多个参数的Laravel路线-如何获得正确的数据库结果
我在学习Laravel的几周内遇到了一个问题,我自己或在线都找不到答案 我正在构建一个目录网站,其URL结构如下:具有多个参数的Laravel路线-如何获得正确的数据库结果,laravel,routes,Laravel,Routes,我在学习Laravel的几周内遇到了一个问题,我自己或在线都找不到答案 我正在构建一个目录网站,其URL结构如下: directory.co.uk/parks directory.co.uk/parks/{country name} directory.co.uk/parks/{country name}/{park name} 由于{park name}不是唯一的,所以我很难返回单个公园的页面。控制器需要使用countryslug查找countryid,然后使用park和parkslug查找i
country
slug
查找country
id,然后使用park
和park
slug查找id
我在web.php文件中有如下路由:
Route::get('/parks','ParksController@index')->name('parks');
Route::get('/parks/{county}/{park}','ParksController@show')->name('park');
我有公园和县的模型(属于这两个,并且在两者之间建立了许多关系)
这两种车型都有:
public function getRouteKeyName()
{
return 'seo_url';
}
然后在我的停车场控制器里,我不知所措。我目前有:
public function show(Counties $county, Parks $park)
{
//return $park;
//dd($park);
return view('parks.park', ['park'=>$park]);
}
我也尝试过非雄辩的方式:
public function show($county_slug,$park_slug)
{
$county = DB::table('counties')->where('seo_url',$county_slug)->get();
$county_id = $county->pluck('id');
$park = DB::table('parks')->where('county_id', $county_id)->where('seo_url', $park_slug)->get();
//dd($county_id);
//return $park;
return view('parks.park', ['park'=>$park]);
}
这将返回404错误。任何帮助都将不胜感激。(我已经读了很多关于路由模型绑定的书,但是没有看到像我这样的例子。)Laravel在its中有一个未记录的特性,可以为回调提供绑定的当前路由。这允许您访问其他参数并使用它们添加条件
Router::bind('park',静态函数($value,Route$Route){
$query=Parks::where('seo_url','=',$value);
如果($route->hasParameter('county')){
$country=$route->parameter('country');
$query->where('country_id','=',$country instanceof countries?$country->id:$country);
}
返回$query->first()??中止(404);
});
导致404错误的实际路线(URL)是什么?