Cakephp 3.0 Сохранить связанную модель

Я изучаю cakePHP 3.0, и у меня возникли проблемы с сохранением связанных данных в моей модели.

Я пытаюсь сохранить клиента со связанными данными ClientPreferences

ClientTable

class ClientsTable extends Table
{
    public function initialize(array $config)
    {
        (...)
        $this->belongsTo('ClientPreferences', [
            'foreignKey' => 'client_preferences_id'
        ]);
    }
}

ClientController

$aClient = $this->Clients->newEntity();
$aClient = $this->Clients->patchEntity($aClient, $this->request->data);

$aClientPreference = $this->Clients->ClientPreferences->newEntity();
$aClientPreference->my_field = 'my value';

$aClient->ClientPreferences = $aClientPreference;

$this->Clients->save($aClient, ['associated' => ['ClientPreferences']];

Сущность Client правильно сохраняется, но не связанная с ней сущность ClientPreferences, и Cake не выдает ошибку.

Я пытался следовать этому: http://book.cakephp.org/3.0/en/orm/saving-data.html

Но не нашли никаких проблем, чтобы сделать это правильно. У кого-нибудь есть совет?

Заранее спасибо.

1 ответ

Решение

Конвенции, конвенции, конвенции

Ясно, что есть разница в примерах, которые вы связали, присмотритесь к именам свойств, и если вы прокрутите немного дальше, вы найдете объяснение специально для belogsTo ассоциации.

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

Кулинарная книга> Сохранение данных> Сохранение принадлежности к ассоциациям

Таким образом, для belongsTo ассоциации, имя свойства по умолчанию ожидается в нижнем регистре и подчеркивании, т.е. $aClient->client_preference,

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

См. Также Поваренная книга> Ассоциации> Ассоциации BelongsTo (особенно foreignKey а также propertyName опции)

Если у вас есть дополнительные данные joinData для сохранения, проверьте это:Cakephp 3 - Сохранить связанный файл ownToMany (joinTable)

В инструкции по этому поводу нет объяснения!

Другие вопросы по тегам