Laravel orm не сохраняет ключ отношения и дочернюю модель - PullRequest
0 голосов
/ 30 мая 2019

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

Это код в моем контроллере. Object:

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

отношение в моделях Object:

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?

1 Ответ

1 голос
/ 30 мая 2019
$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().

...