2015-09-23 2 views
9

Я новичок в продвижении, и я ищу способ увеличить значение в моей базе данных MySQL, не выполняя полный цикл чтения-обновления-записи. Такие, как это:Инкрементное значение в базе данных с помощью Propel

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

Конечно, я могу сделать:

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

Но это привело бы к 2-запросов (выбранный и UPDATE).

Есть ли опрятный способ сделать это в Propel?

+0

Вы можете сделать прямой SQL в propel; в противном случае вы могли бы использовать комбинацию create() -> filterBy() -> update(), чтобы выполнить то, что вы хотите. – versalle88

+0

Я знаю, что могу делать прямой SQL в Propel, но я просто хочу понять, как это решить с помощью Propel. Также, если я использую update(), что бы синтаксис выглядел бы, чтобы увеличить значение? –

ответ

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 ранг меняется.

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

doUpdate() является частной функцией, которая не может использоваться на улице.