Veri mapper desen ve diğer nesneleri otomatik güncellemeler

2 Cevap php

Ben etki alanı nesneleri benim DB ayırmak için veri mapper desen kullanarak bir PHP uygulama inşa ediyorum. Ben DB verilerine dayanarak Sitesi nesneleri döndürür ve Sitesi mevcut geri DB kaydedilmesini nesneleri kabul eden bir mapper sınıfı var.

Benim sorun sistemde bir (ve tek) tüm sitelerin Ben birincil olarak bir set, ben otomatik unset muktedir istiyorum demektir "birincil" site olarak işaretlenmesi olmasıdır Mevcut ilköğretim.

Yani, bir şey gibi:

$mapper = new Site_Mapper();
$site = $mapper->fetch(2);
$site->isPrimary = true;
$mapper->save($site);

Şekilde arka planda otomatik olarak bu yapardı:

$mapper = new Site_Mapper();
$site = $mapper->fetch(1);
$site->isPrimary = false;
$mapper->save($site);

Soru nerede otomatik olarak varolan birincil siteyi güncelleme mantığı gitmeli mi? Bu nesne, önce değil, DB geri kaydedilir durumda DB sorgu başarısız olur ve birincil olarak hiçbir site ile sol konum sonra gerçekleşmesi vardır.

Cheers, Jack

2 Cevap

Şahsen ben özellikle her iki durumda da aynı tablo / mapper ile uğraşıyoruz düşünüyor, Site_Mapper sınıfı ile ek güncelleme mantığını yerleştirmek için en mantıklı düşünürdüm. Bu gibi çalışır, böylece sadece kazanç ($ siteObj) yöntemini geçersiz olabilir:

 public function save($siteObj) 
 {
     // Save the passed object.

     $sql = "UPDATE site SET isPrimary = 1 WHERE id != ?";

     $stmt = new PDO_Statement($sql);

     $stmt->execute($siteObj->id);

 }

Açıkçası belki biraz daha düzgün yapmak için () fonksiyonu bir kurtarış özel ya oluşturabilir veya karşılaştırma aslında güncelleştirme deyimini çalıştırmak gerekir sağlamak için eğer bir kullanabilirsiniz.

Bir veritabanı tetikleyici için bir iş gibi geliyor.

DELIMITER $$

CREATE TRIGGER test_trigger AFTER INSERT ON table
  FOR EACH ROW BEGIN
    IF NEW.isPrimary = 1 THEN 
       UPDATE table 
       SET isPrimary = 0
       WHERE id <> NEW.id;
    END IF;
  END$$

DELIMITER ;