2011-12-31 14 views
11

Mam to pole, którego wartość muszę zwiększyć wartość pola o określoną wartość. Używam tegoInkrementowanie pola bazy danych Cakephp o wartość

$data['quantity']  = 'Order.quantity+1'; 

który nie robi prace dla mnie ilość jest liczbą całkowitą kolumnowej błyskawicznej tutaj. Również będzie działać, gdy nic nie jest w bazie danych ?.

Pozdrowienia Himanshu Sharma

+0

można sprawdzić poniżej linku http://stackoverflow.com/questions/7202256/add-up-value-using-database-field-value-with-savefield-in-cakephp/7202882 # 7202882 – chetanspeed511987

Odpowiedz

14

można użyć updateAll() dla tego

trochę googling odsłania to dość szybko: http://nuts-and-bolts-of-cakephp.com/2008/05/22/incrementing-a-field-in-cakephp/

+0

To jest poprawne, ale chcę go użyć w save not updateall –

+0

Obawiam się, że nie jest to możliwe, ponieważ updateAll i deleteAll są jedynymi metodami atomowymi, a zatem jedynymi, które mogą używać tych nazw pól. – mark

+0

nie jest zapisywać updateall itp. Zaimplementować zapytanie w ich rdzeniu? –

17

użyłem updateAll w moim kodu, aby zwiększyć poglądy w artykule . Dlatego za każdym razem artykuł odwiedza wzywam następującą funkcję od wewnątrz moim zdaniem działania w moim kontrolera artykuły:

function incrementViewCount($id) { 
    $this->updateAll(
     array('Article.viewed' => 'Article.viewed+1'),      
     array('Article.id' => $id) 
    ); 
} 

Następnie w kontrolerze ...

$this->MyModel->incrementViewCount(123); 

zasadzie podobna do samouczka sugeruje poprzednia odpowiedź.

+0

W rzeczywistości jest to nieważne (przynajmniej to nie działa dla mnie) i musiałem zrobić coś takiego: return $ this-> updateAll ( ["hits_count" => $ this-> query() -> newExpr ("hits_count + 1")], ["id IN" => $ ids] ); – Antoniossss

1

Korzystanie saveField:

<?php 

$this->Article->id = $id; 
$this->Article->saveField('viewed', (int)$this->Article->field('viewed') + 1); 

?> 
+2

to sprawia, że ​​więcej zapytań i potrzebnych - również, zapytania atomatyczne, o których mowa powyżej, zawsze będą się odpowiednio zwiększać ... Twoje może nie. – mark

+0

Tak, nie twierdząc, że jest skuteczny. :) Czy mógłbyś rzucić wartość zwróconą z wywołania pola do liczby całkowitej, aby zapewnić przyrost? (edycja dokonana w kodzie) –

+1

Problem polega na tym, że jest nieatomowy, więc inny proces może zwiększyć pole "oglądane", podczas gdy ten się zwiększa ... Utrata jednego kroku w procesie. –

Powiązane problemy