Я использую 16-символьную буквенно-цифровую строку в качестве идентификаторов (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
Michael 9 Май 2014 в 17:58

2 ответа

Лучший ответ

Если у кого-то есть проблемы с этим, скажите, пожалуйста. Однако это решение, которое у меня есть, и оно работает.

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;
    }
}
1
Michael 9 Май 2014 в 15:10

Это может быть хорошим вариантом использования полиморфных отношений - у вас есть одна таблица, в которой хранятся все MDBID, и эта таблица ссылается на исполнителей, альбомы и т. Д.

Ознакомьтесь с документами.

1
alexrussell 9 Май 2014 в 14:21