Laravel匹配多个表的ID

时间:2014-05-09 13:58:34

标签: laravel routing

我在整个应用中使用16个字符的字母数字字符串作为ID(MDBID);用户,艺术家,专辑,曲目等。

我正在使用route::pattern来匹配此内容。

routes.php文件

Route::pattern('mdbid', '[a-zA-Z0-9]{16}');

Route::get('/{mdbid}','MdbidsController@show');

MdbidsController.php (控制器)

public function show($mdbid)
{
    //return $mdbid;
    return Mdbid::whereMdbid($mdbid)->first()->table();
}

Mdbid.php (型号)

public function table() {
    return $this->table_name;
}
public function show($mdbid)
{
    switch($table_name) {
        case 'artists':

            break;
    }
    //$album = Album::findOrFail($id);
    $album = Album::whereMdbid($mdbid)->firstOrFail();

    return View::make(table().'show', compact('album'));
}

我想知道如何找到 MDBID 所属的表,然后在该模型上调用show方法。

我认为在show上使用IdsController方法可以返回相关视图,但我对如何解决这个问题感到困惑。

2 个答案:

答案 0 :(得分:1)

这可能是多态关系的一个很好的用例 - 你有一个存储所有MDBID的表,那个表链接到艺术家,专辑等。

查看the docs

答案 1 :(得分:1)

如果有人对此有任何疑问,请说。但是,这是我有一些解决方案,它可以工作。

<强> MdbidsController.php

public function show($mdbid)
{
    try {
        $table = Mdbid::whereMdbid($mdbid)->firstOrFail()->table();
    } catch ( ModelNotFoundException $e ) {
        Notification::error("Sorry that MDBID doesn't exist.");
        return Redirect::home();
    }
    switch ($table) {
        case 1:
            $artist = Artist::whereMdbid($mdbid)->firstOrFail();
            return Redirect::to('artists/' . $artist->mdbid);
            break;
        case 2:
            $album = Album::whereMdbid($mdbid)->firstOrFail();
            return Redirect::to('albums/' . $album->mdbid);
            break;
        case 3:
            $track = Track::whereMdbid($mdbid)->firstOrFail();
            return Redirect::to('tracks/' . $track->mdbid);
            break;
        case 7:
            $user = User::whereMdbid($mdbid)->firstOrFail();
            return Redirect::to('users/' . $user->mdbid);
            break;
        case 8:
            $tag = Tag::whereMdbid($mdbid)->firstOrFail();
            return Redirect::to('tags/' . $tag->mdbid);
            break;
    }
}