Laravel соотносится со многими ко многим - PullRequest
0 голосов
/ 31 октября 2018

Я застрял на том, как правильно связать моих пользователей с другими таблицами. Я пытался работать с обработкой полиморфных таблиц Laravel без успеха. Вот как выглядят мои столы (не обращайте внимания на множественное использование экипировки и брони, они изменятся позже).

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

:: users ::
id
name

:: equipment ::
id
user_id
equipment_id
equipment_type

:: weapons ::
id
name

:: armors ::
id
name

Что я хотел бы сделать, так это получить оружие и доспехи пользователей

$user->weapons ( Should return all weapons )
$user->armors ( Should return all armors )

Внутри моей БД у меня есть 2 записи в таблице оборудования:

id: 1
user_id: 21 (current user)
equipment_id = 1 (id of a weapon in weapons table)
equipment_type = weapon (string)

id: 2
user_id: 21 (current user)
equipment_id = 2 (id of a weapon in weapons table)
equipment_type = weapon (string)

Это моя текущая попытка использовать полиморфные таблицы larvel

UserModel:

class User extends Authenticatable
{
  public function weapons()
  {
    return $this->morphedByMany('App\Weapon', 'equipment');
  }
}

WeaponModel:

class Weapon extends Model
{  
    public function users()
    {
     return $this->morphToMany('App\User', 'equipment');
    }
}

1 Ответ

0 голосов
/ 31 октября 2018

Столбец equipment_type должен содержать полное имя класса, например, App\Weapon.

Кроме того, вы можете определить пользовательский $morphMap в AppServiceProvider::boot():

Relation::morphMap([
    'armor' => 'App\Armor',
    'weapon' => 'App\Weapon',
]);
...