CakePHP 3不保存hasOne关联

CakePHP 3不保存hasOne关联,cakephp,cakephp-3.0,Cakephp,Cakephp 3.0,我有两种车型-汽车和汽车选项 CarshasOneCarOptions 如果用户要编辑汽车-他们还可以设置一些汽车选项并保存 与Cars相关的所有内容都可以保存,但是CarOptions不会保存。如果在保存之前调试Car对象,我会看到以下内容 Car: { "id": 3, "name": "Ford Mustang", "description": "some description", "city": "San Francisco", "state":

我有两种车型-
汽车
汽车选项

Cars
hasOne
CarOptions

如果用户要编辑汽车-他们还可以设置一些汽车选项并保存

Cars
相关的所有内容都可以保存,但是
CarOptions
不会保存。如果在保存之前调试
Car
对象,我会看到以下内容

Car: {
    "id": 3,
    "name": "Ford Mustang",
    "description": "some description",
    "city": "San Francisco",
    "state": "California",
    "country": "USA",
    "created": "2015-08-14T12:20:14-0500",
    "CarOptions": {
        "manual_transmission": "N"
    }
}
我要保存的代码如下所示

$car = $this->Cars->findByName('Ford Mustang')->first();
$car = $this->Cars->patchEntity($car, $this->request->data);
$carOptions = $this->Cars->CarOptions->newEntity();
$carOptions->manual_transmission = 'N';
$car->CarOptions = $carOptions;
$this->Cars->save($car);

但是,不会创建或编辑CarOptions记录。我遗漏了什么?

您没有正确遵守约定,请参阅

当保存hasOne关联时,ORM希望在关联名称的单数、下划线版本处有一个嵌套实体。[……]

因此,对于名为
CarOptions
的关联,要使用的属性应该是
car\u option

还要注意的是,如果您想让用户选择选项及其值,那么像您正在做的那样对其进行硬编码并不是真正的方法,而是将其正确地传递到请求数据中,并让封送员在修补实体时进行“到实体”的转换

另见


    • 您没有正确遵守约定,请参阅

      当保存hasOne关联时,ORM希望在关联名称的单数、下划线版本处有一个嵌套实体。[……]

      因此,对于名为
      CarOptions
      的关联,要使用的属性应该是
      car\u option

      还要注意的是,如果您想让用户选择选项及其值,那么像您正在做的那样对其进行硬编码并不是真正的方法,而是将其正确地传递到请求数据中,并让封送员在修补实体时进行“到实体”的转换

      另见


      谢谢-这很有效。硬编码只是为了测试Hanks-这很有效。硬编码只是为了测试目的