Laravel 5自定义用户Auth方法

时间:2015-09-12 10:45:08

标签: php laravel laravel-5

我的身份验证用户通过用户模型中的关系为其分配了颜色。

我想去:

return Auth::color()->id;

返回登录用户的颜色ID。

我该怎么做?

我也做不到:

Auth::user()->color()->id

Auth::user()->color->id

我正在Undefined property: Illuminate\Database\Eloquent\Relations\BelongsTo::$id

然而,所有关系都已定义。

我来自Laravel 4,我做错了什么?

<?php

namespace App\Models;

use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;

class User extends Model implements AuthenticatableContract, CanResetPasswordContract
{
    use Authenticatable, CanResetPassword;

    protected $table = 'users';

    protected $fillable = ['name', 'email', 'password'];

    protected $hidden = ['password', 'remember_token'];

    public function color() {
        return $this->hasOne('\App\Models\Colour');
    }

    public function salesarea() {
        return $this->belongsTo('\App\Models\Salesarea');
    }

    public function getNameAttribute() {
        return $this->first_name." ".$this->last_name;
    }

}

2 个答案:

答案 0 :(得分:0)

看到我无法发表评论但我会在这里写下我的问题,

  • 这是一对多还是一对一?
  • 您的颜色数据库表中是否存在user_id列?

如果是一对多你需要检查是否: 您的用户模型具有此功能

    public function colors()
{
    return $this->hasMany('App\Color');
}

您的Color模型具有此功能

    public function user()
{
    return $this->belongsTo('App\User');
}

如果是这样,你应该能做到 Auth :: user() - &gt; colors witch是一组颜色对象

如果它应该是一对一的 您需要检查您的用户模型是否具有此功能

public function color()
{
    return $this->hasOne('App\Color');
}

您的颜色模型具有此功能

public function user()
{
    return $this->belongsTo('App\User');
}

如果是这样,你应该能做到 Auth :: user() - &gt; color witch是一个颜色对象

答案 1 :(得分:0)

如果您的用户表格中包含color_id列,那么您希望属于关系,而不是有一个。 A有一个关系,其他表将有一个user_id列(比如一个profiles表,其中一个配置文件只能属于一个用户)。但在你的情况下,我假设一个颜色可以分配给许多用户,因此用户属于一种颜色,颜色有很多用户。

所以在这种情况下,你需要改变你的关系:

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    public function color()
    {
        return $this->belongsTo(Color::class);
    }
}

然后,您将能够从身份验证服务中查询颜色:

$color = Auth::user()->color;

同时密切关注您的模型命名,因为您在问题中同时使用了美国和英国的“颜色”拼写。