Как я могу реализовать несколько отношений «многие ко многим» в Laravel 5.5? - PullRequest
0 голосов
/ 28 августа 2018

Я делаю небольшой проект laravel для реализации Eloquent Relationships, у меня в основном несколько моделей (Project, Task, User, File и т. Д.)

И проект может иметь несколько назначенных пользователей, несколько файлов, прикрепленных к нему, а также может иметь несколько задач. И одной задаче может быть назначено несколько пользователей, а также может быть назначено несколько файлов, наряду с множеством других вещей. Я гуглил и реализовал отношения hasManyThrough, и он принадлежит ToMany, но меня сильно путают отношения. Любая помощь?

Project.php

class Project extends Model
{

protected $fillable = ['name', 'user_id'];

public function users()
{
    return $this->belongsTo(User::class);
}

public function tasks()
{
    return $this->hasManyThrough(Task::class, User::class);
}
}

Task.php

public function user()
{
    return $this->belongsTo(User::class);
}

User.php

public function tasks()
{
    return $this->hasMany(Task::class);
}

public function project()
{
    return $this->belongsTo(Project::class);
}

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

1 Ответ

0 голосов
/ 28 августа 2018

Похоже, вам не хватает сводных таблиц. я собираюсь сделать некоторые предположения на основе ваших таблиц

Проект, Задача, Пользователь, Файл

Пользователь может участвовать в нескольких проектах, и проекту может быть назначено несколько пользователей. Нелогично использовать задачу или файл для получения пользователей проекта, если только каждый пользователь не может получить доступ к каждому проекту, выполнять задачи и загружать файлы.

Но если есть какой-то процесс назначения (пользователя для проекта), вы должны выполнить миграцию сводной таблицы

Что-то вроде:

project_has_user или в стандартах laravel: users_projects

тогда вы можете реализовать belongsToMany отношения как в Project, так и в пользовательских моделях

Задача <-> Отношения с пользователем аналогичны ... вам также следует создать сводную таблицу users_tasks

...