Красноречивый 5.4, метод hasOneThrough? - PullRequest
0 голосов
/ 09 мая 2019

Я знаю, что hasOneThrough был представлен в последней сборке Laravel, но сейчас я не могу обновиться.Каков наилучший способ сделать это?

У меня есть таблица users, для которой я не могу изменить структуру, но мне нужно назначить role этим пользователям, поэтому я создал сводную таблицу и хочу добавитьметод к моей User модели, чтобы получить роль, и пользователь может иметь только ONE .

Таблицы:

users user_roles user_assigned_roles

Я мог бы использовать hasManyThrough, но это ожидало бы многих, и я хочу скорее вернуть одну модельчем коллекция.

1 Ответ

1 голос
/ 09 мая 2019

Вы можете управлять этим с помощью комбинации один-к-одному & один-ко-многим , а затем получить доступ к роли через средство доступа :

`users` 1 --- 1 `user_assigned_roles` m ---- 1 `user_roles`

Итак, в UserAssignedRole модели:

/** UserAssignedRole.php */

public function role()
{
    return $this->belongsTo('App\UserRole');
}

Тогда в вашей User модели:

/** User.php */

public function assigned_role()
{
    return $this->hasOne('App\UserAssignedRole');
}

// defining an accessor for your role:
public function getRoleAttribute()
{
    return $this->assigned_role->role;  // <--- Access the role of 'UserAssignedRole'
}

Итак, в вашем контроллере (или где угодно) вы можете сделать:

/** UsersController.php */

public function myFunction()
{
    $user = User::find(1);
    $role = $user->role; // <--

    dd($role->name);

    //
}

PS1: я настоятельно рекомендую вам обновить до последней версии Laravel , чтобы использовать новые функции, а такжепо соображениям безопасности, исправлениям и т. д.

PS2: есть пакет под названием Eloquent Has Many Deep от Jonas Staudenmeir , который управляет такого рода отношениями (и другими) для вас.

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