无法获取 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 以获取有关如何访问这些对象的详细说明。
我在 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 以获取有关如何访问这些对象的详细说明。