2009-11-17 19 views

cevap

19
function beforeSave() { 
    if (!$this->id && !isset($this->data[$this->alias][$this->primaryKey])) { 
    // insert 
    } else { 
    // edit 
    } 
    return true; 
} 
+0

Teşekkür ederiz. Mükemmel çalıştı. –

+1

Bunu yapmanın biraz daha iyi bir yolu, '! Isset' testini kullanmak yerine 'boş' testini kullanmaktır. Bu şekilde, veri dizisindeki birincil anahtar alanın var olması, ancak boş olması durumunda (ekleme ve düzenleme görünümünü paylaştığınız zamanki gibi), yine de yeni bir kaydı kaydetme olarak algılar. –

+0

Bu benim için cakephp3 üzerinde çalışmıyor. Cakephp 3 sürümü için lütfen https://stackoverflow.com/a/25589117/1152756 adresini ziyaret edin. – jpruizs

9

!isset() aksine ben, test olarak empty() kullanıyorum dışında bu temelde neilcrookes' cevabı ile aynıdır.

Bir dizi anahtarı varsa, ancak boşsa, o zaman! Setset false değerini döndürür, boş olanlar ise true değerini döndürür.

Kod eklemek için aynı görünüm dosyasını kullanmak, kodum DRY'yi tutmak isterim, yani bir kayıt eklerken, 'id' tuşu ayarlanmaya devam eder, ancak hiçbir şey tutamaz. Kek, bu güzel, kodun neilcrookes sürümü haricinde, bir add olarak tanımlamaz, çünkü mainKey anahtarı veri dizisinde (hiçbir şey içermese bile) ayarlanır. Yani, değişiyor! Boş bırakmak için sadece bu durumda hesaplar.

function beforeSave() { 
    if (!$this->id && empty($this->data[$this->alias][$this->primaryKey])) { 
    // insert 
    } else { 
    // edit 
    } 
    return true; 
}