我是新手,我正在寻找一种方法来增加MySQL数据库中的值,而不必执行完整的read-update-write周期。像这样:

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中,有没有一种整齐的方法可以做到这一点?

最佳答案



不,但是有办法。 ;)您可以将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排名移动的方式。

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

10-12 15:08