2010-04-19 54 views
1

Doctrine_Query更新我需要增加用户的平衡,所以我做的:与浮点值

Doctrine_Query::create()->from('User')->update('balance', 'balance + 0.15')->execute(); 

而且我得到了一个错误“未知的组件别名0”。我认为它是因为 0.15 所以,我怎么可以更新(使用DQL),无需额外SELECT查询用户表的平衡,以获取他的平衡,计算新的平衡,做到查询像Doctrine_Query::create()->from('User')->update('balance', '?', $new_balance)->execute();

回答

2

该解决方案非常适用于MySQL的!

Doctrine_Query::create()->update('Users')->set('balance', 'balance + "0.15"')->execute(); 
+0

为什么你把数字('0.15')当作一个字符串('“0.15”')? – Crozin 2010-04-19 12:33:02

1

你的假设看起来正确。学说认为0是一个表别名。您是否尝试过使用set()

从文档:

$q = Doctrine_Query::create() 
    ->update('Account') 
    ->set('amount', 'amount + 200') 
    ->where('id > 200'); 
// If you just want to set the amount to a value 
$q->set('amount', '?', 500); 
echo $q->getSqlQuery(); 

// UPDATE account 
// SET amount = amount + 200 
// WHERE id > 200 
+0

我需要INCREMENT用户的余额,而不是直接设置。当使用整数值时,它都可以,但float不是。现在我测试Doctrine_Query :: create() - > update('Users') - > set('balance','balance +“0.15”') - > whereIn('id',$ ids) - > execute();这似乎是很好的解决方案。 – yspro 2010-04-19 09:09:45