2017-08-21 113 views
1

我有一個控制器和一個模型。爲什麼使用模型屬性屬性返回空?

現在,我想從控制器獲取模型的屬性,但我無法訪問它。這裏是我的代碼:

模型

<?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內存中實例化一個新的用戶模型,根本不需要從數據庫中檢索,因此,數據庫 –

回答

3

在您的代碼:

$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

1

嘗試

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

     return $user->isRole(); 
    } 

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