Я не думаю, что вы можете. Если вы думаете о том, как это сделать в MySQL, это не будет в одном запросе. Они должны быть отдельными заявлениями, например.
UPDATE `article` SET title = "New Title" WHERE id = 1;
UPDATE `article` SET title = "New Title2" WHERE id = 2;
Вы, наверное, уже где, что вы можете сделать массовые обновления, которые соответствуют указанным критериям, как это:
// set the select condition criteria
$c = new Criteria();
$c->add(ArticlePeer::ID, 1);
// set the update criteria
$update = new Criteria();
$update->add(ArticlePeer::TITLE, 'New Title');
// we need the connection for update, so get default connection
$con = Propel::getConnection();
// finally, do the update
BasePeer::doUpdate($c, $update, $con);
Но это не собирается помочь много в вашем случае, поскольку изменения состояния выберите критерии в каждом экземпляре обновления для вас. Возможно, вы могли бы заключить вышеуказанный код в цикл for, который проходит через ваш массив.
Update:
Вы могли бы попробовать Propel взломать, как показано ниже (непроверенные):
$article = array(
array('Id' => 1, 'Title' => 'New Title'),
array('Id' => 2, 'Title' => 'New Title2'),
array('Id' => 3, 'Title' => 'New Title3'),
array('Id' => 4, 'Title' => 'New Title4')
);
$ids = array();
$when = 'CASE id';
foreach ($article as $a) {
$ids[] = $a['Id'];
$when .= ' WHEN ' . $a['Id'] . ' THEN ' . $a['Title'];
}
$when .= ' END';
$c = new Criteria();
$c->add(ArticlePeer::ID, $ids, Criteria::IN);
$update = new Criteria();
$update->add(ArticlePeer::TITLE, $when);
$con = Propel::getConnection();
BasePeer::doUpdate($c, $update, $con);
Спасибо за ваш ответ. Другие ORM могут реализовать этот тип оболочки SQL. Что касается того, как будет выглядеть запрос MYSQL, он использовал бы оператор CASE как таковой: [link] (http://stackoverflow.com/questions/7759514/update-multiple-rows-with-different-values-in-a- single-query-mysql) – Anthony
Если вы найдете способ выполнить команду MySql в своей ссылке, о которой было бы интересно узнать. Я никогда не видел тех версий Propel, которые поставляются вместе с Symfony 1. * Однако поддержка этих команд. Я на самом деле нашел эти более ранние версии весьма ограничительными, особенно с их поддержкой соединений и т. Д. Надеюсь, вы найдете способ. – antony
Я добавил прокрутку, которая может работать. – antony