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()
调用之后保存它就可以了。
我想通过 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()
调用之后保存它就可以了。