Lumen - Eloquent: переопределить имя присоединяющейся таблицы - PullRequest
0 голосов
/ 28 января 2020

Я создаю БД для программного обеспечения, где аутентификация связана с сервером LDAP компании. Теперь у меня есть две таблицы

AD_Groups

и

AD_Users

, которые объединены в таблицу

AD_UsersXAD_Groups

Я уже узнал об установлении отношений в eloquent. Отношение ко многим ко многим иллюстрируется в официальных документах следующим образом: https://laravel.com/docs/5.8/eloquent-relationships#many-ко-многим

Теперь, как вы можете видеть, следующая функция eloquent не поможет мне много:

"To define this relationship, three database tables are needed: users, roles, and role_user. The role_user table is derived from the alphabetical order of the related model names, and contains the user_id and role_id columns."

Поэтому мне нужно переопределить это производное имя, используя второй параметр, как описано здесь:

"As mentioned previously, to determine the table name of the relationship's joining table, Eloquent will join the two related model names in alphabetical order. However, you are free to override this convention. You may do so by passing a second argument to the belongsToMany method:

return $this->belongsToMany('App\Role', 'role_user');

Но, как видно из приведенного выше примера из документов, печально известный «случай змеи» по-прежнему применяется к имени. Тем не менее, я боюсь, что это может не сработать для моего случая. По общему признанию, AD_UsersXAD_Groups довольно уродлив, и я боюсь, что eloquent / lumen не сможет правильно идентифицировать его элементы и правильно применить правило случая змеи. Но я не знаю наверняка, и поэтому я спрашиваю вас, что будет наиболее вероятно работать. Используя AD_UsersXAD_Groups или AD_UserXAD_Group

1 Ответ

2 голосов
/ 28 января 2020

Поскольку у вас есть «x», маги Eloquent c никогда не смогут автоматически соответствовать вашему столу.

Вы можете переопределить имя таблицы в отношении в вашей модели пользователя. Вы также можете указать ключи, если они не являются ожидаемыми Eloquent "group_id" и "user_id":

function groups() {
    return $this->belongsToMany(GroupModel::class, 'AD_UsersXAD_Groups', 'user_id_key', 'group_id_key')
}

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

function users() {
    return $this->belongsToMany(UserModel::class, 'AD_UsersXAD_Groups', 'group_id_key', 'user_id_key')
}
...