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
指的是 UsersTempTable
,patchEntity()
的 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,
// ...
];
// ...
}
另见
我在使用 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
指的是 UsersTempTable
,patchEntity()
的 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,
// ...
];
// ...
}
另见