通过用户名获取Laravel 5.2用户

时间:2016-06-03 11:34:12

标签: php laravel laravel-5.2

我试图通过用户名获取用户并返回他的个人资料页面。

路线的定义如下:

 Route::get('user/{slug}', 'UserController@getUserByName');

在我的UserController中,我已经定义了getUserByName这样的

public function getUserByName($slug)
{
    $user_id = User::where('username', $slug)->first()->id;
    return view('users.user', compact('user_id'));
}

但是我收到错误No query results for model [App\User]

我已经尝试了this answer中建议的几乎所有解决方案,我仍然会在所有答案中得到相同的错误。

Users表的架构定义如下:

Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('username');
        $table->string('email')->unique();
        $table->string('password', 60);
        $table->rememberToken();
        $table->timestamps();
});

定义查询的正确方法是什么?

我正在使用phpMysql

修改

users.user刀片模板的定义如下:

@extends('layouts.users')

@section('title'){{$user->username}} profile @stop

@section('container')
   @include('users._rightnav')
        <div class="alert alert-info text-center clearfix">
            User details
        </div>
        <ul class="list-group">
            Username:  {{$user->username}}
            Email:     {{$user->email}}
        </div>
@stop

2 个答案:

答案 0 :(得分:2)

在访问其属性

之前,您应始终检查查询结果
public function getUserByName($slug)
{
    $user = User::where('username', $slug)->first();
    $user_id = $user ? $user->id : null;
    return view('users.user', compact('user_id'));
}

答案 1 :(得分:0)

编辑后,

您应该编写如下代码。

在控制器中,

public function getUserByName($slug){      
    $user = User::where('username', $slug)->first();        
    return view('users.user', compact('user'));
}

在视图(刀片文件)中,

@extends('layouts.users')

@section('title')

{{$user ? $user->username : 'No user found'}} profile 

@stop

@section('container')
   @include('users._rightnav')
        <div class="alert alert-info text-center clearfix">
            User details
        </div>
        <ul class="list-group">
            Username:  {{$user ? $user->username : 'No user found'}}
            Email:     {{$user ? $user->email : 'No user found'}}
        </div>
@stop

注意: - 在访问查询结果属性之前,请先检查查询结果,以避免“ 尝试获取非对象属性 ”错误。