【问题标题】:Cakephp 3.0 Save associated modelCakephp 3.0 保存关联模型
【发布时间】:2015-06-21 17:04:30
【问题描述】:

我正在学习 cakePHP 3.0,在我的模型上保存相关数据时遇到了一些问题。

我尝试使用 ClientPreferences 的关联数据保存客户端

客户端表

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

客户端控制器

$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#saving-with-associations

但没有发现任何问题可以正确执行。 有人给点建议吗?

提前谢谢你。

【问题讨论】:

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


    【解决方案1】:

    约定、约定、约定

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

    当保存belongsTo 关联时,ORM 期望在关联名称的单数下划线版本中有一个嵌套实体。例如: [...]

    Cookbook > Saving Data > Saving BelongsTo Associations

    所以对于belongsTo 关联,属性名称默认为小写和下划线,即$aClient->client_preference

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

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

    【讨论】:

    • 感谢您的回答。
    • 我也面临同样的问题,但就我而言,我没有提交表格。我的项目我正在手动准备阵列。但它保存了我的主表数据,而不是关联的表数据。请建议
    • 感谢@ndm。像往常一样对 cakePHP 有帮助!
    【解决方案2】:

    如果您有额外的joinedData 来保存,请查看: Cakephp 3 - Save associated belongsToMany (joinTable)

    手册中没有关于这个的解释!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-01
      • 2013-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多