cakephp 2. X выполнений обновляют/экономят для 2 моделей/столов

У меня есть 2 стола/модели (не имейте никакого отношения друг с другом), которые должны быть обновлены в то же время, и если любой не может закончить процесс обновления, другой не будет обновлен....

если я пробую

if($this->model1->save($data))
   $this->model2->save($data)

model1 будет обновлен, неважно model2 успешно спасен или нет.

эта любая функция обратной перемотки, что я отменяю первое, экономят действие, если вторые экономят действие, терпит неудачу

1
добавлено
Просмотры: 1
nl ja de
Поддержки пирога сделки который кажется, что это было бы релевантно. Я don' t знают ваше приложение, но если вы can' t имеют один без другого, тогда это кажется, что они , связанный до некоторой степени. Могло бы быть достойным рассмотрения.
добавлено автор Ross, источник

1 ответы

Вы могли явно начать и передать/обратными перемотка сделки, как предложено в комментарии Росс .

Но CakePHP даже поддерживает это из коробки с saveAssociated (). Можно просто передать данные для обеих моделей:

For saving a record along with its related record having a hasOne or belongsTo association, the data array should be like this:

$data = array(
      'User' => array('username' => 'billy'),
      'Profile' => array('sex' => 'Male', 'occupation' => 'Programmer'),
);

$Article->saveAssociated($data);

Есть выбор , атомный , который управляет использованием сделок:

атомный: Если верный ( дефолт ), попытается сохранить все отчеты в единственной сделке. Должен быть установлен в ложный, если база данных/стол не поддерживает сделки.

Если проверка потерпит неудачу для одной из моделей, другой не будет спасен также.

Обратите внимание, что ваша база данных должна поддержать сделки. Для MySQL только у двигателя хранения InnoDB есть операционная поддержка, MyISAM не делает. Посмотрите сравнение двигателей хранения MySQL.

2
добавлено