繁体   English   中英

使用Propel增加数据库中的值

[英]Increment value in database using 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中有一个巧妙的方法吗?

在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 );

这是可排序行为实现排名的方式。

BasePeer::doUpdate( $whereCriteria, $valuesCriteria, $con );

doUpdate()是一个不能在外面使用的私有函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM