我尝试使用laravel 5.3创建一个类似的网址但是,并没有向我显示正确的数据
本地主机/游戏/ ID-NameGame-控制台
我试过了:
public function getGame($slug) {
$game = \DB::table('games')->first();
$info_game = \DB::table('info_games')->where('id_game', '=', $game->id_game)->first();
$console = \DB::table('console')->where('id', '=', $info_game->id_console)->first();
$slug = $game->id.'-'.$game->slug.'-'.$console->abb_cat;
return view('front.pages.game', compact('game','info_game','console'));
}
数据库表由:
组成game
*----------------*
id | slug
1 | the-order
5 | uncharted
*----------------*
info_game
*-------------------------*
id | console_id | id_games
1 | 2 | 5
*-------------------------*
所以网址变成了:
本地主机/游戏/ 5-未知-PS4
因为console_id 2 = ps4
他向我展示了这个页面,然而,它向我展示了ID为1的游戏数据,即The Order而非Uncharted
更新
按照评论中的建议,我决定走这条路:
web.php
Route::get('game/{id}-{slug}-{cons}', 'FrontController@getGame');
FrontController.php
公共函数getGame($ id,$ slug,$ cons){
$game = \DB::table('games')->where('slug', '=', $slug)->first();
$info_game = \DB::table('info_games')->where('id_game', '=', $game->id)->first();
$console = \DB::table('console')->where('id', '=', $info_game->id_console)->first();
$id = $game->id;
$cons = $console->abb_cat;
但我不明白为什么当我尝试访问该页面时,它会自动混合我的数据:
at HandleExceptions-> handleError(8,'试图获取属性 非对象&#39 ;, ' \应用\ HTTP \控制器\ FrontController.php&#39 ;, 40,数组(' id' =>' 1',' slug' =>'' ,' cons' =>' order-1886-ps4' , '游戏' => null))在FrontController.php第40行
但它必须是: id:1 slu :: 1886年 缺点:ps4
答案 0 :(得分:0)
您的论坛game
没有id_game
列id
,而console
中没有id_console
它是console_id
所以您的查询
$info_game = \DB::table('info_games')->where('id_game', '=', $game->id_game)->first();
$console = \DB::table('console')->where('id', '=', $info_game->id_console)->first();
应该是
$info_game = \DB::table('info_games')->where('id_game', '=', $game->id)->first();
$console = \DB::table('console')->where('id', '=', $info_game->console_id )->first();
如果你想为某场比赛制作一个slu ..你要正确选择它。你总是在$game = \DB::table('games')->first();
选择第一款游戏,你必须使用像$game = \DB::table('games')->where('slug' ,'=', $slug)->first();
这样的东西
答案 1 :(得分:0)
我决定:
preg_match_all("/([^\-]+)\-(.+)\-(.+)/",$fatSlug,$parts);
$id = $parts[1];
$slug = $parts[2];
$cons = $parts[3];
感谢lanaasts的Snapey