我在整个应用中使用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
方法可以返回相关视图,但我对如何解决这个问题感到困惑。
答案 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;
}
}