CakePHP 2x 到 3x,带 keepExisting 的 HABTM

CakePHP 2x to 3x, HABTM with keepExisting

我有两个模型与 Cake 中的 Has And Belongs To Many 关联关联 2.x。我正在尝试将我的应用程序移植到 Cake 3.3。通常,我在复制 Cake 2.x 关联中的 "keepExisting" 功能时遇到问题。现在,我正在尝试使用 "through" 功能,但我不确定我是否在寻找正确的树。

我有以下表格:

class ContestsTable extends Table
{

/**
 * Initialize method
 *
 * @param array $config The configuration for the Table.
 * @return void
 */
public function initialize(array $config)
{
    parent::initialize($config);

    $this->table('contests');
    $this->displayField('name');
    $this->primaryKey('id');

    $this->addBehavior('Timestamp');

    $this->belongsToMany('Events', [
        'through' => 'ContestsEvents'
    ]);
}
}

class EventsTable extends Table
{

/**
 * Initialize method
 *
 * @param array $config The configuration for the Table.
 * @return void
 */
public function initialize(array $config)
{
    parent::initialize($config);

    $this->table('events');
    $this->displayField('name');
    $this->primaryKey('id');

    $this->addBehavior('Timestamp');

    $this->belongsToMany('Events', [
        'saveStrategy' => 'append',
        'through' => 'ContestsEvents'
    ]);
}
}

class ContestsEventsTable extends Table
{
public function initialize(array $config) {
    $this->belongsTo('Contests');
    $this->belongsTo('Events');
}

}

当我保存带有关联事件的初始比赛时,保存没有问题,关联记录是在加入 table 中创建的。当我编辑比赛记录并更改事件列表时,任何选定的事件都会被添加……但不再被选中的旧事件不会被删除。第二个问题是为已经存在的关系创建新的连接记录。我想保留现有记录而不是创建新记录。稍后在该应用程序中,我将在附加关系中使用连接记录 ID...并且我不希望每次更新覆盖的比赛记录时都重新生成该 ID。

我希望我在描述我正在尝试做的事情时是有意义的。但以最简单的形式,我试图复制通过 Cake 2x 中包含的 'unique' => 'keepExisting' 选项找到的功能,只是无法破解有关如何在 Cake 3.3 中实现此功能的代码?

在此先感谢您的帮助。

好的,就这样吧。首先,我认为我出于沮丧而写了上面的问题,如果不清楚,我深表歉意。我继续处理我应用程序的其他部分,这个问题一直困扰着我。好吧,我想通了...所以这是我的答案:

我是个白痴。

今天,我花了一些时间在沙盒应用上,基本上获得了在沙盒 table 上运行的功能,但无法在应用的 table 上运行。最终我将范围缩小到这是一个数据库问题。是的...我以某种方式在我的连接中创建了 foreign_key 字段 table VARCHAR 而不是 INT。是的...就可以了。

好吧,我想我的意思是永远记录它...检查您的数据库字段并且 tables 设置正确!!!