如果错误的查询,将打印错误


Laravel print error if bad query

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

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
        )
    );
});

我有两个关于这个代码的问题,

First:此代码有效吗?

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

提前感谢!

p。我如何使$u查询到两个地方?例如WHERE login = ?AND uid = ?

首先:代码看起来不错。您还可以利用一个没有文档记载的动态where方法的小特性,并像这样调用它:

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

秒:为了抛出404错误,您可以简单地调用

App::abort(404);
第三:

可以链, () 方法,例如:

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

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

假设您有User模型。试一试:

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);
    }
});

是的,你的代码是有效的,但你可以简化它。

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发送到视图