PHP Doktrin SoftDelete - silinen kayıtları dahil?

5 Cevap php

Ben PHP Doktrini nesnelerden biri bir SoftDelete olarak hareket varsa, belirli sorguların sonuçlarına silinmiş öğeleri dahil etmek mümkün mü? Ne arıyorum böyle bir şeydir ...

$q = Doctrine_Query::create()
    ->select('*')
    ->from('Test t')
    ->where('id < ?', 25)
    *->includeDeleted()*;

Ben silinen kayıtlar hariç istediğiniz en sorgularının gibi böyle bir şey yararlı olacaktır, ama bazen (örneğin, yöneticilere) Ben yumuşak silinmiş kayıtları dahil edebilmek istiyorum. SoftDelete ile bunu yapmak için bazı iyi bir yolu var mı ya da ben sadece en sorgularının üzerine ek nerede fıkra eklemek gerekir?

5 Cevap

Kaynağında bir üstünkörü bakışta here ve here, bu işlevselliği SoftDelete davranış tarafından sağlanan görünmüyor. Eğer önermek gibi manuel bir where fıkra eklemek zorunda.

(Ben yanlış olabilir, ama ben Doctrine_Query Eğer Doctrine_Record. Siz could ile her zaman olabilir gibi bir davranış yoluyla dinamik uzatılabilir olamaz eminim :)) includeDeleted() ekler, ancak bu değer daha fazla gibi görünüyor thouble özel Doctrine_Query alt sınıf yazmak

Bu tablodan tüm kayıtları döndürür (softDeleted dahil)

public function findAllWithDeleted()
{
    $query = $this->createQuery('a');
    $query->addWhere('(a.deleted_at IS NULL OR a.deleted_at IS NOT NULL)');
    return $query->execute();
}

Biz ATTR_USE_DQL_CALLBACKS ihmal VE softdelete sütun yanlış isim vardı Doktrini 1.2.2 bir hata vardı. Çözüm dinleyici üzerine yazmak için:

$m = new MyModel;
$m->setListener(new MockListener());
$m->getTable()->getQueryObject(); //... and so forth

Bir kukla sınıf:

class MockListener implements Doctrine_Overloadable
{
    public function __call($m, $a){}
}

Bu bağlantı size yardımcı olabilir: doctrine-softdelete-behavior-usage

$manager = Doctrine_Manager::getInstance();
$manager->setAttribute(Doctrine_Core::ATTR_USE_DQL_CALLBACKS, false);

Bu seçebilirsiniz sonra, güncelleme, softDelete kapalı gibi verileri silin.