保存与 CakeDC 用户的关联

Saving an Association with CakeDC Users

我正在使用 CakeDC 用户,作为注册的一部分,我希望注册者选择一些与应用程序中的另一个模型相对应的复选框值。我能够让表单很好地加载选项,但我无法将其保存到连接 table 中,即使我已经在它看起来相关的地方添加了所有关联和辅助功能。该表单的显示方式与我保存与不同模型的相同类型关联的其他区域类似。

TypesTable.php

{
    public function initialize(array $config): void
    {
        //$this->addBehavior('Timestamp');
        $this->setDisplayField('type');
        $this->setPrimaryKey('id');
        $this->belongsToMany('Words');
        $this->belongsToMany('Users');
        $this->belongsTo('Languages', [
            'foreignKey' => 'language_id',
            'joinType' => 'INNER',
        ]);
    }```

UsersTable.php (in the plugin folders)
```class UsersTable extends Table
{
   ...
    public function initialize(array $config): void
    {
        parent::initialize($config);

        $this->setTable('users');
        $this->setDisplayField('username');
        $this->setPrimaryKey('id');
        $this->addBehavior('Timestamp');
        $this->addBehavior('CakeDC/Users.Register');
        $this->addBehavior('CakeDC/Users.Password');
        $this->addBehavior('CakeDC/Users.Social');
        $this->addBehavior('CakeDC/Users.LinkSocial');
        $this->addBehavior('CakeDC/Users.AuthFinder');
        $this->hasMany('SocialAccounts', [
            'foreignKey' => 'user_id',
            'className' => 'CakeDC/Users.SocialAccounts',
        ]);
        $this->hasMany('Types', [
            'foreignKey' => 'user_id', 'targetForeignKey' => 'type_id',
        'joinTable' => 'types_users']);
    }```

为了使“belongsToMany”关联在此实例中起作用,两个 *Table.php 文件都必须具有列为 belongsToMany 的关系。不要忘记在实体中也可以访问该字段。

还需要将关联的数组放在 RegisterBehavior.php 文件的 patchEntity 函数中。

用户Table.php(在 CakeDC 用户中)

public function initialize(array $config): void
    {
        ...
        $this->belongsToMany('Types', [
            'foreignKey' => 'user_id', 'targetForeignKey' => 'type_id',
        'joinTable' => 'types_users']);
    }

类型Table.php(应用内)

class TypesTable extends Table
{
    public function initialize(array $config): void
    {
       ....
        $this->belongsToMany('Users');
        $this->belongsTo('Languages', [
            'foreignKey' => 'language_id',
            'joinType' => 'INNER',
        ]);
    }

RegisterBehavior.php

$user = $this->_table->patchEntity(
            $user,
            $data,
            ['validate' => $validator ?: $this->getRegisterValidators($options), 'associated' => ['Types']]
        );