【问题标题】:how to bind multiple related parameters in one route in laravel如何在laravel中的一条路由中绑定多个相关参数
【发布时间】:2017-07-22 21:19:37
【问题描述】:

我有两个相关的模特动漫,剧集

我已经更改了他们两个的 RouteKeyName

在动漫模型中:

public function getRouteKeyName() 
{
    return 'slug';
}

在剧集模型中:

public function getRouteKeyName()
{
    return 'ep_num'; // episode number
}

要查看剧集,我使用这个:

routes/web.php

Route::get('play/{anime}/{episode}', 'EpisodeController@index');

EpisodeController.php

public function index(Anime $anime, Episode $episode)
{
    return view('play')->with([
        'anime' => $anime,
        'episode' => $episode
    ]);
}

例如,如果我有这个链接

.../play/火影忍者/10

然后通过使用路由模型绑定,我将获得 ep_num=10 的第一集

相反,我希望在 ep_num=10 时播放该剧集

anime_id = $anime->id

有没有办法在 RouteServiceProvider 中做到这一点

我想将此应用于包含动漫和剧集的所有路线,例如:

Route::delete('anime/{anime}/episode/{episode}/delete', 'EpisodeController@destroy');
Route::get('anime/{anime}/episode/{episode}/edit', 'EpisodeController@edit');
Route::put('anime/{anime}/episode/{episode}/edit', 'EpisodeController@update');

【问题讨论】:

  • 不太清楚你在追求什么。 anime_id = $anime->id 是什么意思?
  • anime_id 是剧集表中的外键,我希望它等于路线中动漫的 id
  • 好的,你的Episode 动漫模型中的关系是否刚刚称为anime?
  • 对,就叫动漫

标签: php laravel laravel-routing


【解决方案1】:

你可以这样做:

Route::bind('episode', function ($slug) {

    $episode = Episode::where('slug', $slug);

    if (request()->route()->hasParameter('anime')) {
        $episode->whereHas('anime', function ($q) {
            $q->where('slug', request()->route('anime'));
        });
    }

    return $episode->firstOrFail();
});

希望这会有所帮助!

【讨论】:

  • 这对我帮助很大,谢谢
猜你喜欢
  • 2014-09-24
  • 2016-08-30
  • 2023-04-01
  • 2017-01-10
  • 2016-02-26
  • 2017-12-30
  • 2015-08-28
  • 2020-05-31
  • 2017-01-18
相关资源
最近更新 更多