如何使用ORM更新具有不同值的多行?

如何使用ORM更新具有不同值的多行?,orm,symfony-1.4,propel,Orm,Symfony 1.4,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') ); 我正

如果我有一个主键数组,然后是另一个键值对标题:

$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')
);

我正在寻找一种方法来更新我的文章表。

我想你不能。如果您考虑如何在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循环中,该循环在数组中循环

更新:

您可以尝试下面这样的推进黑客(未经测试):


谢谢你的回答。其他ORM能够实现这种类型的SQL包装器。至于MYSQL查询是什么样子的,它将利用CASE语句:如果您找到一种在链接中执行MYSQL命令的方法,那么了解该方法将非常好。我从未见过与Symfony 1捆绑在一起的那些版本的spreep。*但支持此类命令。事实上,我发现那些早期的版本限制性很大,特别是它们支持连接等。希望你能找到一种方法。
$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);