如果查询错误,Laravel打印错误

时间:2015-08-03 08:42:17

标签: php laravel laravel-5 eloquent

我是laravel新手,我写了一个简单的代码:

Route::get('users/{uname}/{uid}', function($uname, $uid)
{
    $u = DB::table('users')->where('login', $uname)->first();

    return View::make('users', 
        array(
            'username'  => $u->login,
            'userid'    => $u->uid
        )
    );
});

我对此代码有2个问题,

首先:此代码有效吗?

第二:如果找不到查询,如何显示404错误?例如,如果我写site.com/users/badusername/badid然后显示404错误,而不是空白页。

提前致谢!

P.S我怎样才能让你对两个人进行查询?例如WHERE login =?和uid =?

3 个答案:

答案 0 :(得分:3)

首先:代码看起来不错。您还可以在方法中使用一些未记录的动态特性,并将其称为:

DB::table('users')->whereLogin($uname)->first();

第二:为了抛出404错误,您只需拨打

即可
App::abort(404);

第三:您可以链接 where()方法,例如:

$u = DB::table('users')->where('login', $uname)->where('uid', $uid)->first();

上面的查询没有多大意义,因为 uid ,可能用户名也是唯一的,只有其中一个提取就足够了。如果您的用户拥有Eloquent模型,您还可以使用模型的 find() findOrFail()方法按主键搜索。特别是 findOrFail()非常有用,因为如果找不到模型会抛出404异常,所以不需要将它包装在 if 语句中。

答案 1 :(得分:0)

是的,您的代码有效,但您可以将其简化。

get('users/{uname}/{uid}', function($uname, $uid)
{
    $user = User::where('login', $uname)->where('uid', $uid)->first();

    if (! $user) abort(404);

    return view('users', compact('user'));
});

要使用此代码,您需要使用Laravel 5+并为您的User表建立模型。

另外,正如您所看到的,我已经写了另一个条件来处理uid

请注意,我将$user发送到视图。

答案 2 :(得分:0)

假设您拥有用户模型。 尝试:

Route::get('users/{uname}/{uid}', function($uname, $uid)
{
    $u = User::where('login', $uname)->where('uid',$uid)->first();

    if(!$u->isEmpty()) {
          return View::make('users',array('username'  => $u->login,
                                          'userid'    => $u->uid));
    }else{
         App::abort(404);
    }
});