Laravel HasManyThrough та же модель с другой областью применения - PullRequest
2 голосов
/ 24 сентября 2019

В настоящее время я сталкиваюсь с проблемой, которая заставляет меня переосмыслить, если я иду по правильному пути.Для примера, у меня ограниченное пространство для маневра с точки зрения ре-архитектуры, но выслушаю меня.

У меня есть две модели, которые ссылаются на одну и ту же таблицу, разные типы «Пользователи».

Провайдер:

class Provider extends User
{

    protected $table = 'users';

    protected static function boot()
    {
        parent::boot();

        static::addGlobalScope('user_type', function (Builder $builder) {
            $builder->where('type', '=', 'provider')->orWhere('type', '=', 'admin');
        });

    }

}

Пользователь:

class User extends Authenticatable
{
   ...normal user items
}

Это может показаться странным, но Провайдер может «владеть» любым количеством пользователей через столбец «provider_id».Провайдер также может владеть другим провайдером через provider_id.Я пытаюсь создать отношения, в которых «родительский» поставщик (тот, кто владеет другим поставщиком) может получить доступ к принадлежащим «дочернему» поставщику.

Я пытаюсь использовать hasManyThrough, но продолжаю сталкиваться со следующимошибка:

Syntax error or access violation: 1066 Not unique table/alias

Мои отношения выглядят так:

class Provider extends User
{

    protected $table = 'users';

    protected static function boot()
    {
        parent::boot();

        static::addGlobalScope('user_type', function (Builder $builder) {
            $builder->where('type', '=', 'provider')->orWhere('type', '=', 'admin');
        });

    }

    public function childSavers() {
        return $this->hasManyThrough(User::class, Provider::class, 'provider_id', 'provider_id', 'id', 'id');
    }
}

Насколько я знаю, это потому, что я пытаюсь развернуться на той же таблице, но как еще можно определитьэто отношения?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...