2009-09-01 14 views
3

PHP Doctrineオブジェクトの1つがSoftDeleteとして機能する場合、削除されたアイテムを特定のクエリの結果に含めることは可能ですか?私が探している私は削除されたレコードを除く、時には(例えば、管理者に)したいほとんどのクエリのためとして...このようなPHP Doctrine SoftDelete - 削除されたレコードを含める?

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

何かが有用であろう。このようなものです私はできるようにしたいですソフト削除されたレコードを含めることができます。 SoftDeleteでこれを行うには良い方法がいくつかありますか、単にほとんどのクエリにwhere句を追加するだけですか?

答えて

2

ソースherehereの大雑把な一見から、この機能はSoftDeleteの動作では提供されていないようです。提案するよう手動でwhere句を追加する必要があります。

(私は間違っているかもしれないが、私はあなたがDoctrine_RecordでできるようDoctrine_Queryは、行動の仕方によって動的に拡張することはできません確信している。あなたは常にincludeDeleted()を追加し、特別なDoctrine_Queryサブクラスを書くことができますが、それはそうです)

1

Doctrine 1.2.2にATTR_USE_DQL_CALLBACKSが無視され、softdelete列の名前が間違っていたバグがありました。ダミークラスで

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

:ソリューションは、リスナーを上書きすることである。この後

public function findAllWithDeleted() 
{ 
    $query = $this->createQuery('a'); 
    $query->addWhere('(a.deleted_at IS NULL OR a.deleted_at IS NOT NULL)'); 
    return $query->execute(); 
} 
1
$manager = Doctrine_Manager::getInstance(); 
$manager->setAttribute(Doctrine_Core::ATTR_USE_DQL_CALLBACKS, false); 

(softDeletedを含め)それはテーブルからすべてのレコードを返し

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

は「ソフト削除」した実体ような結果に表示され、ルックス $ EM-> getFilters() - > disable( 'soft-deleteable');

関連する問題