Laravel orm 不保存关系键和子模型

Laravel orm not save relation key and child model

我想通过 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
        ]
];

为什么只创建对象而不创建对象 table 中的地址和 id_address?

$address= new Address(['address'=>$curr['address']['city']]);

这将实例化一个 Address 对象,但不会保存在数据库中。 因此该对象没有 ID,这就是 id_address(顺便说一句,我强烈建议您将字段名称更改为 address_id)未更新的原因。

你应该做

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

无论如何,保存你的Object两次没有意义,在associate()调用之后保存它就可以了。