我想通过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?
答案 0 :(得分:1)
$address= new Address(['address'=>$curr['address']['city']]);
这将实例化一个Address
对象,但不会保存在db中。
因此该对象没有ID,这就是id_address
(我强烈建议您将字段名称更改为address_id
)的原因。
你应该做
$address= new Address(['address'=>$curr['address']['city']]);
$address->save();
$obj->address()->associate($address);
无论如何,两次保存Object
并没有意义,只需在associate()
调用后保存它即可。