CakePHP 3:保存关联模型失败

CakePHP 3: Save Associated Model Fail

我在使用 Cakephp 3 patchEntity 保存关联模型时遇到困难。涉及的模型总结在这里

我的用户临时表

 public function initialize(array $config)
{
    $this->table('users_temp');
    $this->displayField('name');
    $this->primaryKey('id');
    $this->addBehavior('Timestamp');
    $this->hasOne( 'UsersExtraTemp', [
        'foreignKey' => 'user_id'
    ]);

}

然后是我的 UsersExtraTempTable

public function initialize(array $config)
    {
        $this->table('users_extra_temp');
        $this->displayField('id');
        $this->primaryKey('id');
        $this->belongsTo('UsersTemp', [
            'foreignKey' => 'user_id',
            'joinType' => 'INNER'
        ]);
    }
    public function buildRules(RulesChecker $rules)
    {
        $rules->add($rules->existsIn(['user_id'], 'UsersTemp'));
        return $rules;
    }

Mi函数保存数据:

   $user = $this->newEntity();
   $user = $this->patchEntity($user, $this->request->data, [
              'associated' => ['UsersTemp.UsersExtraTemp']
           ]);
   $this->save( $user, ['associated' => ['UsersExtraTemp']] );

我的数据数组由 $this->debug()

打印
(
    [name] => name
    [lastname] => lastname
    [email] => email@email.com
    [password] => password
    [passwordConfirm] => repeatPassord
    [UsersExtraTemp] => Array
        (
            [google_token] => sjskdasdadk2
        )

)

我在数据库中为 user_temp 创建了一行,但没有为我期望的 users_extra 创建行。知道我做错了什么吗?

鉴于 $this 指的是 UsersTempTablepatchEntity()associated 选项不应包含该名称,因为这表明 UsersTempTable 是与 UsersTempTable 关联,事实并非如此。

该选项看起来应该与 save() 调用中的选项完全相同,即

$user = $this->patchEntity($user, $this->request->data, [
    'associated' => ['UsersExtraTemp']
]);

同样在数据中,您应该为关联使用正确的 属性 名称,在 hasOne 关联的情况下,它是关联名称的单数、带下划线的变体,即 users_extra_temp

(
    // ...

    [users_extra_temp] => Array
        (
            [google_token] => sjskdasdadk2
        )

)

最后但同样重要的是,确保 属性 名称在 UsersTemp 实体中定义 $_accessible 属性

class UsersTemp extends Entity
{
    // ...

    protected $_accessible = [
        // ...
        'users_extra_temp' => true,
        // ...
    ];

    // ...
}

另见