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

时间:2019-05-30 16:21:52

标签: laravel octobercms

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

1 个答案:

答案 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()调用后保存它即可。