После обновления до 5.4, мои отношения, где больше не работают должным образом. После проверки выяснилось, что Laravel теперь ищет разные имена foreignKey: user_user_id
или post_post_id
вместо user_id
, post_id
и т. Д. Это работало до L 5.3. Мне также пришлось обновить некоторые из моих основных стержневых табуляций до tag_tag_id и т. Д., Чтобы заставить их работать снова.
Я обновил свои имена в именах сторон в соответствии с этим новым соглашением, и теперь он работает. Но я все еще хотел бы знать, почему и как это изменилось и откуда оно исходит.
Благодаря!
Вы переопределяете первичный ключ на своих моделях с помощью getKeyName
?
Laravel по-прежнему использует ту же самую конвенцию user_id
что и внешний ключ.
Однако в 5.4 вам не нужно явно указывать внешний ключ при определении отношения.
Из документов:
Подобно предыдущим релизам Laravel, эта связь обычно использует user_id как внешний ключ. Однако поведение может отличаться от предыдущих выпусков, если вы переопределяете метод getKeyName модели User
Обновление до 5.4.0 От 5.3
Обновить
Проблема может быть вызвана также установкой значения $ primaryKey. Вы не представили никакого кода. Однако, предполагая, что в вашей модели пользователя вы определяете $primaryKey = user_id
Laravel добавит имя столбца к этому имени ключа. Таким образом, вы видите, что laravel пытается запросить user_user_id.
Просто удалите $ keyname из пользовательской модели, и laravel возьмет на себя внешний ключ, следуя соглашению user_id.
Или вы могли бы определить внешний ключ, явно передающий второй аргумент в attributeTo (): return $this->belongsTo(User::class, 'user_id);