为什么使用模型属性属性返回空?

问题描述:

我有一个控制器和一个模型。为什么使用模型属性属性返回空?

现在,我想从控制器获取模型的属性,但我无法访问它。这里是我的代码:

模型

<?php 

namespace App; 

use Illuminate\Notifications\Notifiable; 
use Illuminate\Foundation\Auth\User as Authenticatable; 
use Illuminate\Database\Eloquent\Model; 

class User extends Authenticatable 
{ 
    use Notifiable; 

    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = [ 
     'name', 'email', 'password','role' 
    ]; 

    /** 
    * The attributes that should be hidden for arrays. 
    * 
    * @var array 
    */ 
    protected $hidden = [ 
     'password', 'remember_token', 
    ]; 

    public function isRole() 
    { 
     return $this->role; //mysql column role 
    } 
} 

控制器

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\User; 

class HomeController extends Controller 
{ 
    public function index() 
    { 
     $user = new User; 
     return $user->isRole(); //this is just to test display the role column. but it returns empty or no value. 
    } 
} 

我也试图呼应$this->role功能isRole()里面,但是这又是空的。在我的数据库中,我在role列中插入了值。

我也执行了PHP工匠迁移为了更新数据。

有人帮我:这是怎么回事?感谢

+0

你只是在PHP内存中实例化一个新的用户模型,根本不需要从数据库中检索,因此,数据库 –

在您的代码:

$user = new User; 
return $user->isRole(); 

你要创建一个用户无中生有,所以作用将是垃圾。请尝试以下方法让你的表的第一个用户:

$user = User::firstOrFail(); 
return $user->isRole(); 

注意,如果表是空的,firstOrFail会抛出异常。

编辑:

正如shukshin.ivan's comment指出,还可以使用过滤用户像下面这样的where条款:

$user = User::where('email', $request->email)->first(); 
return $user->isRole(); 
+0

上有什么记录并不重要,因为它有道理。如果我要通过电子邮件地址获取数据,那该怎么办?这里是我的用户:'$ user = User :: where('email',$ request-> email)'我应该如何获得基于该电子邮件地址的列? – smzapp

+1

获得第一个(它是唯一的)匹配用户'$ user = User :: where('email',$ request-> email) - > first()' –

+0

thx @ shukshin.ivan,我将你的解答添加到我的答案中 – wasthishelpful

尝试

public function index() 
    { 
     $user = App\User::find(1); 

     return $user->isRole(); 
    } 

你得到空值,因为new User();为空