2017-04-13 26 views
0

我正在訪問用戶表屬性「角色」,並希望檢查角色是否2然後顯示儀表板但獲取此錯誤。 這裏是我的代碼類的對象照亮數據庫雄辯集合無法轉換爲int

protected $casts = [ 
    'role' => 'integer', 
]; 

這裏是我訪問用戶角色列值我的控制器功能。它返回數組中的值,但我想比較它與整數值'2'。

public function postSignIn(Request $request) 
{ 
    $this->validate($request,[ 
     'email' => 'required', 
     'password' => 'required', 
    ]); 
    $posts = Post::all(); 
    $email = $request['email']; 
    $user = User::where("email",$email)->get(['role']); 
    if(Auth:: attempt(['email' => $request['email'] , 'password' => $request['password']])) 
    { 
     if ($user == 2) { 
      return view('admin.dashboard'); 

     } 
     else { 
      return view('frontend.layouts.user_login_layout', compact('posts')); 
     } 
    }else{ 
     return "wrong User"; 
    } 
} 

回答

4

問題

$user = User::where("email",$email)->get(['role']); // <= look here (fetching) 

if ($user == 2) { // <= look here (validation) 
    return view('admin.dashboard'); 
} 

抓取對象

// RETURN me FIRST user FROM collection of users WHERE row email EQUALS $email 
$user = User::where("email",$email)->first(); 
// Better aproach is to fail (throw exseption) if collection is empty 
$user = User::where("email",$email)->firstOrFail(); 

注:集合是包含其他對象

如果郵件是唯一值一個對象,你可以使用->first()檢索第一個模型匹配查詢的限制 - source: laravel docs

如果您預計多條記錄,你可以使用方法如->all()->get()將檢索多個結果 - source: laravel docs

驗證

此時,$user變量包含一個雄辯的對象,並且不可能將對象與整數(int)進行比較。

你真正想要做什麼:檢查用戶的角色相當於2

if ($user->role == 2) { // <= look here 
    return view('admin.dashboard'); 
} 
+0

我已經試過這個。它顯示了一個例外。此集合實例上不存在屬性[角色]。 – DevTaabi

+0

當我使用if($ user ['role'] == 2)時,它顯示未定義的索引:角色 – DevTaabi

+0

您應該在數據庫中使用與'列名'相同的名稱。如果找不到,請爲您的用戶對象提供數據庫模式。 像我之前悲傷:$用戶是一個對象不是數組!...你不能像數組訪問它。 – VikingCode

2

更改這行代碼中的

$user = User::where("email",$email)->get(['role']); 

這個

$user = User::where("email",$email)->first(); 

爲get會返回一個集合,然後你可以檢查用戶角色爲

if ($user->role == 2) { 
+1

謝謝!問題解決了 :) – DevTaabi

相關問題