雄辩模型的关系不起作用;甚至没有查询

我有一个用户和父子关系中的用户和角色模型,如下面的代码所示。会发生什么是我可以通过父母访问孩子,但反之亦然。访问孩子的角色($ user-> role)只给我这个ID。角色列在角色表上有一个外键,但反过来不起作用。 基本上, $角色包含所有用户 $用户>角色不会显示用户的角色,只是他的身份证雄辩模型的关系不起作用;甚至没有查询

Laravel-Debugbar还表明,用户不执行额外的查询,而角色一样。

用户表

id name email password remember_token client role created_at updated_at

角色表

id name display_name description created_at updated_at

用户模型

namespace App; 

use Illuminate\Notifications\Notifiable;

use Illuminate\Foundation\Auth\User as Authenticatable;

use Illuminate\Database\Eloquent\Model;

use Laratrust\Traits\LaratrustUserTrait;

use App\Client;

use App\Role;

use App\Permission;

class User extends Authenticatable

{

use LaratrustUserTrait;

use Notifiable;

protected $fillable = [

'name', 'email', 'password','role',

];

public function client(){

return $this->hasOne('App\Client', 'client');

}

public function role(){

return $this->belongsTo('App\Role')->withDefault();

}

}

角色模型

namespace App; 

use Laratrust\Models\LaratrustRole;

use App\Permission;

use App\User;

class Role extends LaratrustRole

{

protected $fillable = [

'name', 'display_name', 'description',

];

public function GetHasPermission($perm){

return DB::table('permission_role')->where('role', $this->id)

->where('permission',$perm)->first()->value('type');

}

public function users(){

return $this->hasMany('App\User','role', 'id');

}

public function permissions(){

return $this->hasMany('App\Permission');

}

public function getName(){

return $this->name;

}

}

编辑:应该指出,我正在使用Laratrust。

回答:

由于您未遵循Laravel naming conventions,您需要手动定义外键。因此,改变role()关系:

public function role() 

{

return $this->belongsTo('App\Role', 'role')->withDefault();

}

https://laravel.com/docs/5.5/eloquent-relationships#one-to-many-inverse

然后用->role()->first()代替->role->role()直接使用关系。 ->role首先尝试使用对象的属性,如果它不存在,它将加载相关数据(对象或集合)。由于User对象具有角色属性,因此Laravel使用它而不是加载相关的Role对象。

以上是 雄辩模型的关系不起作用;甚至没有查询 的全部内容, 来源链接: utcz.com/qa/265873.html

回到顶部