CakePHP saveAll () не удаляет и не обновляет таблицу соединений - PullRequest
0 голосов
/ 10 января 2011

Я хочу, чтобы объединительная таблица обновлялась / удалялась автоматически.Я делаю deleteAll () перед saveAll () в качестве обходного пути для этого.

Когда я отправляю форму, модели Layout и Component обновляются правильно, но модель Layout Component (которая является таблицей соединений)) вставляет новые данные (что я и хочу), но не удаляет ссылочные данные.

Модель макета:

class Layout extends AppModel {
    var $name = 'Layout';

    var $hasMany = array(
        'LayoutComponentOrder' => array(
            'className' => 'LayoutComponentOrder',
            'foreignKey' => 'layout_id',
            'dependent' => false,
            'order' => 'LayoutComponentOrder.sort_id ASC',
        ),
        'ComponentVideo' => array(
            'className' => 'ComponentVideo',
            'foreignKey' => 'layout_id',
            'dependent' => false,
        ),
);}

Компонентная модель:

class ComponentVideo extends AppModel {
    var $name = 'ComponentVideo';
    //The Associations below have been created with all possible keys, those that are not needed can be removed

    var $hasMany = array(
        'LayoutComponentOrder' => array(
            'className' => 'LayoutComponentOrder',
            'foreignKey' => 'layout_component_id',
            'dependent' => false,
        ),
    );

    var $belongsTo = array(
        'Layout' => array(
            'className'    => 'Layout',
            'foreignKey'    => 'layout_id'
        ),
    );
};

МакетМодель компонентов (таблица соединений):

class LayoutComponentOrder extends AppModel {
    var $name = 'LayoutComponentOrder';
    var $uses = 'layout_component_orders'; 

    //The Associations below have been created with all possible keys, those that are not needed can be removed

    var $belongsTo = array(
            'Layout' => array(
                'className'    => 'Layout',
                'foreignKey'    => 'layout_id'
            ),
            'ComponentVideo' => array(
                'className'    => 'ComponentVideo',
                'foreignKey'    => 'layout_component_id'
            )
        );
}

Контроллер компоновки:

// deleting the data manually
$this->LayoutComponentOrder->deleteAll(array('LayoutComponentOrder.layout_id' => $layout_id));
// this one inserts into the tables including the join table        
$this->Layout->id = $layout_id;
if ($this->Layout->saveAll($this->data)) {
   $this->Session->setFlash(__('The layout has been saved', true));
}

Как можно автоматически удалить объединение?Возможно ли это с CakePHP?

Ответы [ 2 ]

1 голос
/ 15 апреля 2011

К сожалению, это не встроено в saveAll CakePHP для отношений hasMany. Хотелось бы, чтобы это было, поскольку я нашел эту страницу в поисках решения той же проблемы.

Похоже, он встроен в отношения HABTM.

См. Есть ли способ заставить saveAll () удалять посторонние объекты? и Не следует ли saveAll также удалять все связанные записи?) .

Вы должны будете реализовать свое собственное решение (Мое быстрое решение, выполняющее deleteAll перед saveAll, если форма проверяется. Это не идеально, потому что, если есть ошибка, не связанная с проверкой формы, вы теряете существующие элементы).

0 голосов
/ 18 апреля 2014

Может быть, я не понимаю вопроса, но мы говорим об удалении объединений, когда родительская запись удаляется из Cake? Он делает это, если сконфигурирован в отношениях модели с помощью «зависимого» параметра:

зависимый: когда для зависимого ключа установлено значение true, а модель метод delete () вызывается с параметром каскада, установленным в значение true, связанные записи модели также удаляются. В этом случае мы установили его Значение true, так что удаление пользователя также приведет к удалению ассоциированного с ним профиля.

http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html

Это то, что вы ищете?

...