php - 使用 Propel 在数据库中增加值

标签 php mysql propel

我是 propel 的新手,我正在寻找一种方法来增加我的 MySQL 数据库中的值,而无需执行完整的读取-更新-写入循环。比如这样:

UPDATE books SET popularity = popularity + 1 WHERE id = 123

当然可以:

$book = new BookQuery::create()->findPk(123);
$book->setPopularity($book->getPopularity() + 1);
$book->save();

但这会导致 2 个查询(SELECT 和 UPDATE)。

在 Propel 中有没有一种巧妙的方法来做到这一点?

最佳答案

Is there a neat way to do this in Propel?

没有,但是有办法。 ;) 您可以将 Criteria::CUSTOM_EQUAL 参数与 Criteria->add() 一起使用:

$con = Propel::getConnection( BooksPeer::DATABASE_NAME, Propel::CONNECTION_WRITE );
$whereCriteria = BooksQuery::create()->filterById( 123 );
$valuesCriteria = new Criteria( BooksPeer::DATABASE_NAME );
$valuesCriteria->add( BooksPeer::POPULARITY, BooksPeer::POPULARITY . " + 1", Criteria::CUSTOM_EQUAL );
BasePeer::doUpdate( $whereCriteria, $valuesCriteria, $con );

这就是可排序行为的方式 implements等级转移。<​​/p>

关于php - 使用 Propel 在数据库中增加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32744647/

相关文章:

mysql - 即使不满足其中一个 where 子句,也会在 SQL 中返回结果

mysql - 推进/Symfony 1.4 : combine securely custom sql subquery with criteria

php - 如何使用 Propel ORM 中的 SQL "replace"函数?

php - 验证两个字段不应彼此相等 yii2

php - 共享主机中带有 PHP .htaccess 的动态子域

MySQL:组子句的多列

database - 插入 ORM 数据固定装置

javascript - 下拉框不通过 php 发送表单数据

php - 需要有关 mysql 错误的帮助

mysql - 如何根据此 ID 恢复文件? MySQL数据恢复