Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有多个参数的Laravel路线-如何获得正确的数据库结果_Laravel_Routes - Fatal编程技术网

具有多个参数的Laravel路线-如何获得正确的数据库结果

具有多个参数的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

我在学习Laravel的几周内遇到了一个问题,我自己或在线都找不到答案

我正在构建一个目录网站,其URL结构如下:

  • directory.co.uk/parks
  • directory.co.uk/parks/{country name}
  • directory.co.uk/parks/{country name}/{park name}
  • 由于{park name}不是唯一的,所以我很难返回单个公园的页面。控制器需要使用
    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)是什么?