Я пытаюсь расширить модель пользователя с соответствующими навыками и уровнями.Где все пользователи будут иметь разные уровни квалификации для различных навыков.Я пытаюсь найти наиболее эффективный способ установить отношения для достижения этой цели.
В настоящее время я устанавливаю уровень навыка «Уровень - как отношение многие ко многим».Пользователь для skill_has_levels - один ко многим, но в данный момент он не используется.
Существует множество навыков, которыми может обладать пользователь, и каждый навык может иметь разный уровень от отсутствия опыта до эксперта.
[Tables]
users
id, username, email, pwd, token, timestamps
skills (ie. laravel, angular, bootstrap, etc)
id, name, order
levels (ie. none, beginner, intermediate, expert)
id, name, value
skills_has_levels
id, skills_id, levels_id, users_id
У нас есть три модели:
1) User (has many skills with levels)
2) Skill (has many levels)
3) Level (has many skills)
В модели Skill: (чтобы идентификатор пользователя был доступен: не используется)
$this->belongsToMany('App\Level’)
->withPivot(‘users_id’);
Для просмотра списка всех пользователей, их навыков и уровней:
$users = User::all()->toArray();
foreach($users as $user)
{
echo "User ID: ".$user->id;
$skills = Skill::where(‘users_id’, ’=‘, $user->id)->get()->toArray();
print_r($skills);
echo "\n\n\n";
}
В конечном счете, я бы хотел, чтобы модель User возвращала массив навыков / уровней всех связанных пользовательских навыков и их уровней: имя навыка, порядок навыков, имя уровня и значение уровня.
То, что я сейчас делаю, работает, но я чувствую, что это можно сделать лучше.
Каков наилучший способ структурировать отношения для модели User для подключения к именам навыков и связанным значениям уровней?
Возможно ли связать навык / уровень напрямую с моделью пользователя?Поэтому мне нужно только использовать модель User для доступа ко всем связанным навыкам и уровням.
Или мои отношения неверны?Могли бы поменять модели на это отношение:
A User has many Skill
Skill has many skill types
Skill has many skill levels
Заранее спасибо.