Существует 2 возможных ответа в зависимости от вашей структуры данных, что не ясно из вашего вопроса.
User
/ Team
до Assignment
отношение ко многим (у каждого Assignment
есть один User
/ Team
, а у каждого User
/ Team
есть множество Assignments
многие ко многимотношения, в которых каждый User
/ Team
имеет множество Assignments
, а каждый Assignment
имеет множество Users
/ Teams
Один ко многим
В случае «один ко многим» вам не понадобится таблица Assignment
и * AssignmentAllocation
, поэтому я предполагаю, что ваша AssignmentAllocation
- ваша *Модель 1038 *. Если нет, то вместо таблицы нужно поставить столбцы assignmentable_type
и assignmentable_id
в таблицу assignments
и использовать Assignment.php
вместо AssignmentAllocation.php
.
AssignmentAllocation.php
public function assignmentable()
{
return $this->morphTo();
}
User.php
public function assignments()
{
return $this->morphMany('App\Models\AssignmentAllocation', 'assignmentable');
}
Team.php
public function assignments()
{
return $this->morphMany('App\Models\AssignmentAllocation', 'assignmentable');
}
Ваша ошибка в том, что Laravel ищет в таблице users
соответствие (у вас есть morphMany('User'..
), когда он должен искать в таблице AssignmentAllocation
. Так что просто отключите их.
1) morphMany
действуеткак hasMany
, так что вы говорите:
Каждый User
hasMany
Assignment
с и каждый Team
hasMany
Assignments
.В первой части morphMany
написано «поиск по таблице AssignmentAllocation
», а во второй части «поиск по assignmentable
_id и assignmentable
_type, равным этому экземпляру этой модели».
2) morphTo
действует как belongsTo
, так что вы говорите:
Каждый Assignment
belongsTo
assignmentable
.
Много ко многим
Однако, если AssignmentAllocation
является сводной таблицей "многие ко многим", и у каждого Assignment
есть много Users
или Teams
, а у каждого User
/ Team
есть много Assignments
, тогда вам нужна пара morphToMany
/ morphedByMany
.
User.php
public function assignments()
{
return $this->morphToMany('App\Models\Assignment', 'assignmentable');
}
Team.php
public function assignments()
{
return $this->morphToMany('App\Models\Assignment', 'assignmentable');
}
Assignment.php
модель ПРИМЕЧАНИЕ: не модель AssignmentAllocation
public function users()
{
return $this->morphedByMany('App\Models\User', 'assignmentable');
}
public function teams()
{
return $this->morphedByMany('App\Models\Team', 'assignmentable');
}
Вам следует переименовать таблицу assignment_allocation
в assignmentables
или добавить требуемые третий и четвертый аргументы в функции morph.Я предпочитаю, чтобы имена таблиц были согласованными.