2016-09-06 9 views
1

У меня есть две модели, которые связаны с ассоциацией и имеют много ассоциаций в тортах 2.x. Я пытаюсь передать приложение на Cake 3.3. В общем, у меня возникла проблема с репликацией функциональности «keepExisting», найденной в ассоциациях Cake 2.x. Прямо сейчас я пытаюсь использовать «сквозную» функциональность, но я не уверен, что я лаю по правильному дереву.CakePHP от 2x до 3x, HABTM с keepExisting

У меня есть следующие таблицы:

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'); 
} 

} 

Когда я сохранить первоначальный конкурс с ассоциированными событиями, сохранить в порядке и запись ассоциации, созданные в соединительной таблице. Когда я редактирую запись конкурса и изменяю список событий, добавляется любое из выбранных событий ... но старые, которые больше не выбраны, не удаляются. Вторая проблема заключается в том, что для уже существующих отношений создается новая запись объединения. Я хотел бы сохранить уже существующие записи, а не создавать новые. Позже в приложении я буду использовать id записей соединений в дополнительных отношениях ... и я не хочу, чтобы идентификатор восстанавливался каждый раз, когда обновляемая запись о соревнованиях обновляется.

Надеюсь, у меня есть смысл описать то, что я пытаюсь сделать. Но в простейшей форме я пытаюсь реплицировать функциональность, найденную с помощью опции «unique» => «keepExisting», включенной в Cake 2x, просто не может взломать код, как это сделать в Cake 3.3?

Заранее за вашу помощь.

ответ

1

ОК, Итак, вот оно. Во-первых, я думаю, что я написал вопрос выше из разочарования, поэтому извини, если не ясно. Я продолжил работу над другими частями моего приложения, и этот вопрос застрял в моей голове. Ну, я это понял ... так вот мой ответ:

Я был идиотом.

Сегодня я потратил некоторое время на приложение для песочницы и в основном получил функциональность для работы с песочницей, но не смог заставить ее работать с таблицами приложений. В конце концов я сузил его до того, что это проблема с базой данных. Да ... Я как-то сделал поля foreign_key в моей таблице соединений VARCHAR, а не INT. Да ... это сделает это.

Ну, я думаю, моя задача - записать это на всю вечность ... Проверьте правильность настройки полей и таблиц базы данных!