Güncelle "Özellikler"

2 Cevap php

Ben şimdi, müşteriler için tırnak yapmak için kullanılacak, bu CakePKP'deki bir uygulama yazıyorum. Yani mesaji bir modeldir. Ben diğer modeller tarafından kullanılıyor olabilir "Mülkiyet" gibi bir şey için ayrı bir model / bir tablo istiyorum.

Bir kullanıcı "Teklif Ekle" eylem alır her zaman, temelde "nextQuoteNumber" veya bu satırlar boyunca bir şey denilen bir özellik çekin ve daha sonra otomatik olarak bu özelliği, even if the new Quote isn't saved. artırmak istiyor Yani sanmıyorum Sadece alıntı kimliği için bir Autoıncrement kullanarak burada uygun - Ayrıca, "alıntı numara" satırın kimliği farklı olabilir.

Bunu yapmak için yeterince basit olduğunu biliyorum, ama bunu yaparken "doğru" CakePHP şekilde anlamaya çalışıyorum! Ben ben Özellik model içinde bir yöntem olmalıdır olduğunu düşünerek ediyorum ki, "getProperty ($ property_name)" geri dönmek için değeri çekin ve aynı zamanda değerini artırmak ... ama ne iyi yolu emin değilim olurdu Bunu yapmanın Parite kumandadan bu yöntemi çağırmak için nasıl ya.

Ben ne yapmalıyım? Şimdiden teşekkürler!

2 Cevap

Ben doğrusu daha genel 'Property' yerine 'Dizi' için bir model yapmak, biraz daha özel bir şey yapıyor sona erdi. Id, ad, değer: Sıra üç alan vardır. Ben şu anda 1001 den başlayarak tırnak için bir dizi ihtiyacı olduğundan, bir satır (1, 'Alıntı', 1001) var.

Model dosyası sequence.php olarak şu şekildedir:

class Sequence extends AppModel {
var $name = 'Sequence';

function getNext($sequenceName) {
    // Make this a transaction, so two concurrent requests can't get the same value.
    $this->begin();
    // Find the sequence for the given object, let's say 'Quote'
    $row = $this->find('first', array(
        'conditions' => array('Sequence.name' => $sequenceName),
        'fields' => array('id', 'value'),
    ));
    // Save the original value (before incrementing) so we can return it.
    $value = $row['Sequence']['value'];
    // Update the value in the database.
    $row['Sequence']['value'] = $value + 1;
    $this->save($row);
    // Commit the changes to the database, ending the lock.
    $this->commit();
    return $value;
} 

Webbiedave işaret ettiği gibi), bölünmezlik gereklidir ya da bu nedenle (başlar () ve tamamlama, iki kullanıcı / tırnak aynı sıra numarası almak olabilir mümkündür çağırır.

Sonra, benim quotes_controller yılında, ben add () eylem olarak aşağıdaki ekledi:

$this->loadModel('Sequence');
$quoteNumber = $this->Sequence->getNext('Quote');

Keşke Sonra ben $ quoteNumber kullanabilirsiniz.

Bu birileri yardımcı olur umarım, ve bunu yapmanın daha iyi bir yolu varsa katkıda lütfen. Teşekkürler!

Eğer bir şekilde kilitlemeyi istihdam sürece başlangıçtaki yaklaşım yinelenen alıntı sayıda üretecek.

Kullanıcı "Teklif Ekle" sayfasına gittiğinde, sen tırnak tabloda yeni bir satır oluşturmak id kapmak ve sayfanın içine atmak istiyorum. Kullanıcı teklif gönderdiğinde, yeni bilgi ile satır güncellemek.

Bu sorgulardan boş tırnak filtrelemek için önemsiz olacaktır.