Используйте сводные таблицы с разными моделями

Получил следующие модели:

  • Пользователь
  • Группа пользователей
  • Элемент

Теперь у каждого пользователя есть belongsToMany отношение к Item с помощью pivot:

    public function items()
    {
        return $this->belongsToMany(Item::class)
            ->withPivot('value');
    }

Это структура item:

Item

  • title
    • pivot:
      • value

Пример

User

  • имя: Тим
  • items:
    • title: car
    • значение (точка поворота): 2

Теперь становится сложно: я бы хотел использовать User также в модели UserGroup - и каждый User должен иметь много Item с новой сводной таблицей, которая не идентична сводной таблице, Item имеет, когда это точка поворота User.

Пример

UserGroup

  • название: Party-Group
  • users:
    • name: Tim
    • items:
      • title: car
      • значение (точка поворота): 3

Мой подход

Поэтому я думаю, что единственно возможным решением было бы создать что-то вроде новой модели под названием UserGroupUser (расширенный с User) с отношением к UserGroupUserItems (расширенный с Item).

Но, может быть, есть более разумный способ сделать это?


person SPQRInc    schedule 07.10.2019    source источник


Ответы (1)


Вы можете создать метод users () в группе User следующим образом:

class UserGroup extends Model
{
    public function users()
    {
        return $this->hasMany(User::class);
    }
}

// Then to retrieve your data:
$groups = UserGroup::with('users.items')->get();
dd($groups);
person mdexp    schedule 08.10.2019