проблема с использованием сводной таблицы с Eloquent и Laravel - PullRequest
0 голосов
/ 30 марта 2020

Вот моя проблема. У меня есть таблица с именем user, а таблица с именем skill, также у меня есть сводная таблица, которая связывает эти две категории, называемая EmployeeSkill. Я пытаюсь получить навыки, принадлежащие пользователю, но когда я использую тинкер, он возвращает Базовую таблицу или представление не найдено: 1146 Таблица 'pfe_sirh_db.skill_user' не существует (SQL: выберите skills. *, skill_user. user_id как pivot_user_id, skill_user. skill_id как pivot_skill_id, skill_user. employee_id как pivot_employee_id из skills внутреннее соединение skill_user в skills. id = skill_user. skill_id где skill_user. user_id = 1) ', и я использую сваггер по тому, как он возвращает это «withTimestamps»: false

    class User extends Authenticatable{

protected $table = "users";
   public function skills()
    {
        return $this->belongsToMany(Skill::class);
    }
}

и

   class Skill extends Model
    {
       public function User()
        {
            return $this->belongsToMany(User::class);
        }

}

и сводная таблица

    class EmployeeSkill extends Model
{
    protected $table = "employee_skills";

    protected $fillable = [
        'employee_id', 'skill_id', 'note'
    ];


}

1 Ответ

0 голосов
/ 30 марта 2020

Ваша сводная таблица должна иметь имя skill_user ( единственное число ) после названия модели, которой они принадлежат. И вам не нужна модель EmployeeSkill для работы этого отношения, вам нужна только таблица.

Как сказано в документации :

, чтобы определить имя таблицы объединяющей таблицы отношений, Eloquent объединит два связанных имени модели в алфавитном порядке . Тем не менее, вы можете изменить это соглашение. Вы можете сделать это, передав второй аргумент в метод ownToMany

И затем вы должны исключить эту строку:

protected $table = "employee_skills";

изменить имя таблицы на skill_user

И в своей сводной таблице вы должны использовать user_id в качестве внешнего ключа

Вы можете получить все навыки у пользователя, выполнив следующее:

$user = User::find(1); $user->skills();

Это даст вам все навыки пользователя с идентификатором 1

Имейте в виду, что вы можете использовать любое имя таблицы и любое имя внешнего ключа, но если вы сделаете это, вам нужно указать имена на отношения. Поэтому я рекомендую вам делать то, что я вам сказал, так как это стандартный способ

...