Doctrine ORM: вставка сущности без спецификации IDENTITY в транзакцию

Я пытаюсь использовать Doctrine в приложении CLI, которое обрабатывает миграцию данных. Все шло хорошо, пока я не столкнулся с таблицей / сущностью, у которой нет приращения идентификатора для первичного ключа. Ну, первичный ключ на самом деле является составной из трех полей. Спецификация таблицы (MySql):

CREATE TABLE `xcart_variants` (
`variantid` int(11) NOT NULL DEFAULT '0' COMMENT 'Use XCVariantsChange::addVariant to add a row;AUTO_INCREMENT is removed for performance purpose',
`productid` int(11) NOT NULL DEFAULT '0',
`avail` int(11) NOT NULL DEFAULT '0',
`weight` decimal(12,2) NOT NULL DEFAULT '0.00' COMMENT 'Use func_decimal_empty',
`productcode` varchar(32) NOT NULL DEFAULT '0' COMMENT 'Cannot be unique as used by different providers and may be duplicated in    XCVariantsChange::repairIntegrity()',
`list_price` decimal(12,2) NOT NULL DEFAULT '0.00' COMMENT 'Can be disabled using config[PRoduct_Options][PO_use_list_price_variants].Use func_decimal_empty',
`def` char(1) NOT NULL DEFAULT '',
`is_product_row` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'For performance;For replace left join to inner join;Must duplicate product data;Only one such row is allowed per productid;def is 0 for the row',
PRIMARY KEY (`productid`,`variantid`,`is_product_row`),
UNIQUE KEY `pp` (`productcode`,`productid`),
KEY `pi` (`productid`,`is_product_row`),
KEY `vi` (`variantid`,`is_product_row`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

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

$arr['variantid'] = func_query_first_cell("SELECT MAX(variantid)+1 FROM $sql_tbl[variants]");
$res = db_query("INSERT INTO $sql_tbl[variants]
(variantid,productid,
avail,weight,
productcode, list_price,
def,is_product_row)
VALUES ($arr[variantid], '$arr[productid]',
$arr[avail]', '$arr[weight]',
'$arr[productcode]', '$arr[list_price]',
'$arr[def]', '$arr[is_product_row]')");

Проблема в том, что у меня есть другие вставки, которые нужно выполнить в UnitOfWork, и связи с внешним ключом должны быть подключены. Похоже, что Doctrine поддерживает прямой SQL с настраиваемым отображением, но в документах говорится, что это действительно только для операторов SELECT.

Какой лучший способ справиться с этим делом?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]