Yii сделка с отношениями - PullRequest
1 голос
/ 14 октября 2011

У меня есть приложение, в котором есть две таблицы 'album' и 'photo', где photo имеет посторонний ключ для album.id.Я использую транзакцию для хранения данных в базе данных.

Проблема возникает при сохранении фотографии.Сбой:

$photo->albumId = Album::model()->findByAttributes('albumOtherId')->id; 

, поскольку в базе данных нет записи альбома, а findByAttributes возвращает NULL.

Есть ли способ сделать это внутри транзакции?

Ответы [ 2 ]

1 голос
/ 03 ноября 2012

Я знаю, что это старый вопрос, но я искал ответ на эту же проблему сегодня.Я не мог поверить, что единственный способ решить эту проблему - сначала создать «ключ поиска» без использования транзакции.Я не знаю, была ли у OP такая же ситуация, но для моей транзакции мне была нужна только возможность выполнить откат, поскольку я удаляла и обновляла другие таблицы, но мне не требовались проверки внешнего ключа (только для этогосделка).Итак, перед первым запросом я добавил следующее (MySQL):

$transaction = $connection->beginTransaction();
$sqlForeingKeyDisable = 'SET foreign_key_checks = 0;';
$command = $connection->createCommand($sqlForeingKeyDisable);
$command->execute();

Это позволило мне без проблем использовать rollback () и commit ().Надеюсь, что смогу помочь.

0 голосов
/ 16 декабря 2011

так что я бы сделал, это проверить, если Album :: model () -> findByAttributes ('albumOtherId') -> id === NULL

, тогда, если это так, создайте новый альбом или спроситепользователь для создания альбома.Вы должны создать альбом из-за отношения, в противном случае он никогда не сохранится, поскольку это зависит от того, является ли он альбомом.

...