Сцена такова: у меня есть пользовательская модель, ролевая модель и модель разрешений с отношениями «многие ко многим» и «один ко многим».
модель пользователя (вы можете видеть отношение «один ко многим», разрешение «много»)ко многим отношениям):
<?php
namespace App\Models;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
// ------------------------------------------------------------------------------
// Model Traits
// ------------------------------------------------------------------------------
use Notifiable;
// ------------------------------------------------------------------------------
// Model configuration (extended from parent)
// ------------------------------------------------------------------------------
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token'
];
/**
* The attributes that should be eager loaded.
*
* @var array
*/
protected $with = ['role', 'permissions'];
// ------------------------------------------------------------------------------
// Model Relationships
// ------------------------------------------------------------------------------
public function role() {
return $this->belongsTo('App\Models\Role');
}
public function permissions() {
return $this->belongsToMany('App\Models\Permission');
}
}
Ролевая модель:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use GeneaLabs\LaravelModelCaching\Traits\Cachable;
class Role extends Model
{
use Cachable;
protected $with = ['permissions'];
// ------------------------------------------------------------------------------
// Model Relationships
// ------------------------------------------------------------------------------
public function users() {
return $this->hasMany('App\Models\User');
}
public function permissions() {
return $this->belongsToMany('App\Models\Permission');
}
}
Модель разрешения:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use GeneaLabs\LaravelModelCaching\Traits\Cachable;
class Permission extends Model
{
use Cachable;
// ------------------------------------------------------------------------------
// Model configuration (extended from parent)
// ------------------------------------------------------------------------------
/**
* Campos autorellenables para la generación automática de modelos
*/
protected $fillable = ['name'];
// ------------------------------------------------------------------------------
// Model Relationships
// ------------------------------------------------------------------------------
public function users() {
return $this->belongsToMany('App\Models\User');
}
public function roles() {
return $this->belongsToMany('App\Models\Permission');
}
}
Если я позвоню User::with(['role', 'permissions'])->get()
или даже User::with(['role.permissions', 'permissions'])->get()
Iполучить пользовательские данные, данные роли и данные разрешения.Все в порядке, кроме роли разрешения никогда не загружаются.Поэтому я не могу работать с ними, не добавив еще один запрос для этого разрешения роли пользователя.
Я знаю, что у роли есть права доступа, когда я выполняю Role::where('id', 3)->with('permissions')->get();
, отношение работает и имеет данные разрешения.
Что я делаю не так?
Мои таблицы БД: пользователи, разрешения, роли, access_role и license_user.
Редактировать - Это результат, который я получаю отутверждение:
[
{
"id": 1,
"role_id": 3,
"name": "UserName",
"email": "username@domain.com",
"email_verified_at": null,
"created_at": "2018-12-10 13:04:00",
"updated_at": "2018-12-10 13:04:00",
"role": {
"id": 3,
"name": "Editor",
"created_at": "2018-12-10 13:03:31",
"updated_at": "2018-12-10 13:03:31",
"permissions": []
},
"permissions": [
{
"id": 3,
"name": "Delete post",
"created_at": "2017-10-23 11:07:43",
"updated_at": "2017-10-23 11:07:43",
"pivot": {
"user_id": 1,
"permission_id": 3
}
}
]
}
]
Как видите, разрешения роли пусты.