Laravel mixed get Eloquent загружается с несколькими моделями - PullRequest
0 голосов
/ 19 декабря 2018

Сцена такова: у меня есть пользовательская модель, ролевая модель и модель разрешений с отношениями «многие ко многим» и «один ко многим».

модель пользователя (вы можете видеть отношение «один ко многим», разрешение «много»)ко многим отношениям):

<?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
        }
      }
    ]
  }
]

Как видите, разрешения роли пусты.

1 Ответ

0 голосов
/ 19 декабря 2018

Я решил это сам.Это была проблема с кешированными моделями.Очистка кеша php artisan cache:clear решена правильно.

...