Laravel orm не сохраняет ключ отношения и дочернюю модель

Я хотел бы сохранить данные через Eloquent, в частности объект и его соответствующий адрес. Объект имеет внутри id_address, который следует обновить после создания адреса. Но этого не происходит. Хотя он следует коду руководства, и отображение отношений в моделях правильное.

Это код в моем объекте контроллера:

$obj= new Object(['alias' => $curr['alias']]);
$obj->save();
$address= new Address(['address'=>$curr['address']['city']]);
$obj->address()->associate($address);
$obj->save();

отношение в моделях Объект:

public $belongsTo = [
        'address' => [
                '\XXXXXX\Models\Address',
                'key'=>'id_address',
                'otherKey'=>'id',
                'delete'=>true
        ],

отношение в адресной модели:

public $hasOne = [
        'obj' => [
                '\XXXXXXX\Models\Object',
                'key'=>'id',
                'otherKey'=>'id_address',
                'delete'=>false
        ]
];

Почему создается только объект, а не адрес и id_address в таблице объектов?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
0
48
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
$address= new Address(['address'=>$curr['address']['city']]);

Это создаст экземпляр объекта Address, но не сохранит его в БД. Так что у этого объекта нет идентификатора, и поэтому id_address (кстати, я настоятельно рекомендую вам изменить имя поля на address_id) не обновляется.

Ты должен сделать

$address= new Address(['address'=>$curr['address']['city']]);
$address->save();
$obj->address()->associate($address);

В любом случае нет смысла сохранять Object дважды, просто сохраните его после вызова associate().

Другие вопросы по теме