我不認爲你可以。如果你考慮如何在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);
但是,這並不是什麼幫助你的情況下,因爲選擇的標準條件的變化在每個更新實例中爲你。也許你可以將上面的代碼放在循環遍歷你的數組的循環中。
更新:
你可以嘗試破解的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 2013-04-25 02:27:02
如果你找到一種方法來在你的鏈接中執行MySql命令,這將是很好的瞭解。我從來沒有見過與Symfony 1捆綁在一起的Propel版本。*儘管支持這些類型的命令。我實際上已經發現那些早期版本是相當有限制的,尤其是對於它們對連接的支持等。 希望你找到一種方法。 – antony 2013-04-25 06:21:25
我添加了一個propel hack,可能工作。 – antony 2013-04-25 07:35:07