Я хотел бы сохранить данные через 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 в таблице объектов?
$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()
.