Laravel没有在页面上显示正确的日期

时间:2017-04-04 12:24:36

标签: php laravel-5

我尝试使用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

2 个答案:

答案 0 :(得分:0)

您的论坛game没有id_gameid,而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