Propel

2015-09-23 10 views
9

kullanarak veritabanında artırım değeri Ben propel için yeni ve tam bir okuma-güncelleme-yazma döngüsü yapmak zorunda kalmadan MySQL veritabanımda bir değeri artırmak için bir yol arıyorum. Bunun gibi:Propel

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

Ama bu 2 sorguları (SEÇ ve GÜNCELLEME) neden olur: Elbette

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

Yapabileceğim.

Bunu Propel'de yapmak için düzgün bir yol var mı?

+0

Pervaneye düz SQL yapabilirsiniz; aksi halde, istediğiniz şeyi gerçekleştirmek için create() -> filterBy() -> update() öğelerinin bir kombinasyonunu kullanabilirsiniz. – versalle88

+0

Propel'de düz SQL yapabileceğimi biliyorum, ancak bunu sadece Propel ile nasıl çözeceğimi anlamak istiyorum. Ayrıca update() işlevini kullanırsam, sözdizimi bir değeri artırmak için ne gibi görünürdü? –

cevap

1

Bunu Propel'de yapmak için düzgün bir yol var mı?

Hayır, ama bir yolu var. ;) Sen Criteria->add() ile Criteria::CUSTOM_EQUAL parametresini kullanabilirsiniz:

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

Bu nasıl sıralanabilir davranış implements sıralaması değişen olduğunu.

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

doUpdate(), dışarıda kullanılamayan özel bir işlevdir.