我试图通过用户名获取用户并返回他的个人资料页面。
路线的定义如下:
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
答案 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
注意: - 在访问查询结果属性之前,请先检查查询结果,以避免“ 尝试获取非对象属性 ”错误。