我的身份验证用户通过用户模型中的关系为其分配了颜色。
我想去:
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;
}
}
答案 0 :(得分:0)
看到我无法发表评论但我会在这里写下我的问题,
如果是一对多你需要检查是否: 您的用户模型具有此功能
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;
同时密切关注您的模型命名,因为您在问题中同时使用了美国和英国的“颜色”拼写。