У меня 3 таблицы
User: user_serno(primary key), username, email
Role: role_serno(primary key), name
User_role_pivot: user_role_privot_serno(primary key), user_serno(foreign key), role_serno(foreign key)
И у меня есть ownToMany в моей UserModel
public function roles() {
return $this->belongsToMany('App\RoleModel',
'USER_ROLE_PIVOT',
'ROLE_SERNO',
'ROLE_SERNO');
Я пытаюсь получить пользователя с ролями, и я получаю пустой результат, проверял, что запрос не правильный.
$user = UserModel::find(121)->roles;
Я могу загрузить пользователя, но роли не работают, ниже выполняются запросы:
Во-первых: select t2.* from ( select rownum AS "rn", t1.* from (select * from USER where USER.USER_SERNO = '121') t1 ) t2 where t2."rn" between 1 and 1
Second: select ROLE.*, USER_ROLE_PIVOT.ROLE_SERNO as pivot_ROLE_SERNO from ROLE inner join USER_ROLE_PIVOT on ROLE.ROLE_SERNO = USER_ROLE_PIVOT.ROLE_SERNO where USER_ROLE_PIVOT.ROLE_SERNO is null
Почему ROLE_SERNO имеет значение null! Я думаю, что это должно быть USER_SERNO = 121
Функция ownToMany в UserModel должна быть определена следующим образом:
public function roles() {
return $this->belongsToMany('App\RoleModel',
'User_role_pivot',
'user_serno',
'role_serno');
Для упоминания связанных ключей сначала укажите ключ текущей модели (UserModel), а затем ключ другой модели (RoleModel). Вы используете тот же ключ в обоих.