我是新手,我正在寻找一种方法来增加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中有一种巧妙的方法吗?
答案 0 :(得分:1)
在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排名的方式。
答案 1 :(得分:0)
BasePeer::doUpdate( $whereCriteria, $valuesCriteria, $con );
doUpdate()是一个不能在外面使用的私有函数。