Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP4:如何保存hasone数据_Cakephp_Cakephp 4.x - Fatal编程技术网

CakePHP4:如何保存hasone数据

CakePHP4:如何保存hasone数据,cakephp,cakephp-4.x,Cakephp,Cakephp 4.x,我有两个数据库表1)用户2)配置文件 profiles有一个名为bank_ac的字段 我试图从用户模型中保存它 我创建了表单输入,如 <?= $this->Form->create($user) ?> <?= $this->Form->control('profile.bank_ac'); ?> <?= $this->Form->end() ?> 调试后获得数据,如 [ 'name' => 'Jone'

我有两个数据库表1)用户2)配置文件

profiles有一个名为bank_ac的字段

我试图从用户模型中保存它

我创建了表单输入,如

<?= $this->Form->create($user) ?>
   <?= $this->Form->control('profile.bank_ac'); ?>
<?= $this->Form->end() ?>
调试后获得数据,如

[
    'name' => 'Jone',
    'email' => 'abcd@yahoo.com',
    'profile' => [
        'bank_ac' => '1212212'
    ]
]
调试后补丁实体

object(App\Model\Entity\User) {

    'name' => 'Jone',
    'email' => 'abcd@yahoo.com',
    '[new]' => true,
    '[accessible]' => [
        'name' => true,
        'email' => true,
        'created' => true,
        'modified' => true
    ],
    '[dirty]' => [
        'name' => true,
        'email' => true,
        'profile' => true
    ],
    '[original]' => [],
    '[virtual]' => [],
    '[hasErrors]' => false,
    '[errors]' => [],
    '[invalid]' => [],
    '[repository]' => 'Users'

}
在UsersController/add中,我应用了如下代码

public function add(){

        $user = $this->Users->newEmptyEntity();

        $user = $this->Users->patchEntity($user, $this->request->getData());

        $this->Users->save($user, ['associated' => ['Profiles']]);

}

配置文件数据未保存,也未获得任何错误。如何保存此关联数据

查看实体调试结果,可访问性配置中缺少
profile
字段,因此不允许在批量分配(修补)中使用该字段

将它添加到您的
用户::$\u可访问的
属性中,它应该可以工作:

protected $_accessible = [
    // ...
    'profile' => true,
];
另见


为了进一步了解,请调试已修补的
$user
实体。更新了我的问题,谢谢。@NiloyRony取决于实体的构建方式(手动、使用用户数据等),以及您对创建实体的过程的信任程度。技术上,如果你认为实体创建过程是安全的(即用户不能分配你不希望他们能够在特定动作中保存的数据),那么你就不需要限制保存过程。因此,如果实体创建过程中的某些内容发生更改,则不需要的数据很容易滑入,因此您可能希望同时使用
关联的
选项进行修补和保存,这样即使假定安全的实体不可信,保存也会受到限制。
protected $_accessible = [
    // ...
    'profile' => true,
];