Cakephp 3.0保存相关模型

时间:2015-04-15 16:04:39

标签: cakephp save model-associations cakephp-3.0 associated-object

我正在学习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']];

正确保存了客户端实体,但没有关联的ClientPreferences实体,并且Cake没有抛出任何错误。

我试图遵循这个: http://book.cakephp.org/3.0/en/orm/saving-data.html#saving-with-associations

但是没有找到任何问题来正确地做到这一点。 有人有建议吗?

提前谢谢。

2 个答案:

答案 0 :(得分:3)

公约,惯例,惯例

您链接的示例中显然存在差异,请仔细查看属性名称,如果向下滚动一点,您将找到专门针对belogsTo关联的解释。< / p>

  

保存belongsTo关联时,ORM需要在关联名称的单数下划线版本中使用单个嵌套实体。例如:   [...]

<强> Cookbook > Saving Data > Saving BelongsTo Associations

因此,对于belongsTo关联,默认情况下,属性名称应为小写和强调,即$aClient->client_preference

你的外键应该顺便说一句。单数也是为了匹配约定,即client_preference_id,即使它只是导致问题的属性名称。

另请参阅 Cookbook > Associations > BelongsTo Associations (尤其是foreignKeypropertyName选项)

答案 1 :(得分:0)

如果要保存其他的joinedData,请检查以下内容: Cakephp 3 - Save associated belongsToMany (joinTable)

手册中对此没有任何解释!