CakePHP 3 не сохраняет ассоциации hasOne

У меня две модели - Cars и CarOptions

Cars hasOne CarOptions

Если пользователь редактирует автомобили, он также может установить некоторые параметры 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 не создается и не редактируется. Что мне не хватает?


person ChicagoSky    schedule 29.08.2015    source источник


Ответы (1)


Вы не соблюдаете соглашения должным образом, см.

Поваренная книга> Доступ к базе данных и ORM> Сохранение Данные> Сохранение ассоциаций HasOne

При сохранении ассоциаций hasOne ORM ожидает наличие единственной вложенной сущности в единственной подчеркнутой версии имени ассоциации. [...]

Итак, для ассоциации с именем CarOptions используемое свойство должно быть car_option.

Также обратите внимание, что если вы хотите, чтобы пользователь мог выбирать параметр и его значение, жесткое кодирование его, как вы делаете, на самом деле не лучший способ, вместо этого правильно передать его в данных запроса и позволить маршаллеру сделать преобразование "в сущность" при исправлении сущности.

Смотрите также

person ndm    schedule 30.08.2015
comment
спасибо - это сработало. Жесткое кодирование предназначалось только для тестирования. - person ChicagoSky; 30.08.2015