类的对象阐明数据库eloquent集合无法转换为int

时间:2017-04-13 07:28:58

标签: database laravel eloquent

我正在访问用户表属性'role',并想检查角色是否为2然后显示仪表板但是收到此错误。 这是我的代码

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";
    }
}

2 个答案:

答案 0 :(得分:6)

<强>问题

$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');
}

答案 1 :(得分:2)

在代码中更改此行

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

到这个

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

因为get会返回一个集合,然后你可以检查用户角色为

{{1}}