无法获取 Laravel 中的关系属性

Trouble getting attribute of relation in Laravel

我在 Laravel 5 中遇到了关系问题。问题是我有一个 table User 并且该用户属于 Group,在 用户 模型我有这个:

public function group(){
    return $this->belongsTo('App\models\Group');
}

模型 Group 具有以下属性:name,unity,level, init_date。我还放了一个默认函数 return 一个组作为字符串,这是代码:

public function __toString(){
        return $this->name.' Unity '.$this->unity;
    }

所以,在一个视图中有很多用户的东西,我想为他们每个人显示单位、姓名、日期。当我调用 $user->group 时,它 return 正确地告诉了我字符串中的名称和统一性(因为 _toString 函数),这意味着他真的在完美地查询组,但是,当我想访问带有 $user->group->name Laravel 的简单属性如统一、日期或名称给我这个错误:

Trying to get property of non-object

我什至试过 $user->group()->name 然后我得到:未定义 属性: Illuminate\Database\Eloquent\Relations\BelongsTo::$name

已编辑:

模特用户:

class User extends Model implements AuthenticatableContract, CanResetPasswordContract {

    use Authenticatable, CanResetPassword;

    protected $table = 'users';

    protected $fillable = ['email', 'password','estate','filial_id','perfil_id','rol','cat_teacher'];

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = ['password', 'remember_token'];

    public function __toString(){
        return $this->email;
    }

    public function filial(){
            return $this->belongsTo('App\models\Filial');
    }

    public function perfil(){
        return $this->belongsTo('App\models\Perfil','perfil_id');
    }

    public function grupo(){
        return $this->belongsTo('App\models\Group','group_id','id');
    }
}

模特组:

class Group extends Model {


protected $table = 'groups';

protected $fillable = ['name','unity','date'];

public function filiales() {
   return $this->belongsTo('App\models\Filial');
}

public function teacher(){
    return $this->belongsTo('App\models\User','teacher_id');
}

public function users() {
    return $this->hasMany('App\models\User');
}
}

然后,在控制器中我做了一个dd($users),没有出现关系,出现了其他关系,但没有这个。在视图中,我想在 table 中打印一些属性,为此我有:

<td>{{$user->group}}</td>
<td>{{$user->group->unity}}</td>

第一行完美运行,我不知道为什么。

您无法 return 您的 group 名称的原因是 ->group() return 是查询生成器的实例,而不是 eloquent collection/object。由于 user 属于单个 group,请使用以下两种方式之一修改您的代码:

public function group(){
    return $this->belongsTo('App\models\Group')->first();
}

然后使用以下方法之一访问该组:

$user = User::with("group")->where("id", "=", 1)->first();
$group = $user->group;
echo $group->name;

// OR

$user = User::where("id", "=", 1)->first();
$group = $user->group();
echo $group->name;

或者,保持 group() 函数不变,并在您的 $user 对象上访问 ->group()->first()

$user = User::where("id", "=", 1)->first();
$group = $user->group()->first();
echo $group->name;

上述任何方法都应该正确地 return 您的 group 对象的名称(或其他属性)。查看 Eloquent Documentation 以获取有关如何访问这些对象的详细说明。