5

PHP Doctrine オブジェクトの 1 つを SoftDelete として機能させる場合、特定のクエリの結果に削除されたアイテムを含めることはできますか? 私が探しているのは、このようなものです...

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

このようなものは、削除されたレコードを除外したいほとんどのクエリに役立ちますが、(たとえば管理者に対して) 論理的に削除されたレコードを含めることができるようにしたい場合があります。SoftDelete を使用してこれを行う良い方法はありますか、またはほとんどのクエリに where 句を追加するだけでよいでしょうか?

4

5 に答える 5

3

テーブルからすべてのレコードを返します (softDeleted を含む)

public function findAllWithDeleted()
{
    $query = $this->createQuery('a');
    $query->addWhere('(a.deleted_at IS NULL OR a.deleted_at IS NOT NULL)');
    return $query->execute();
}
于 2011-07-14T10:30:00.537 に答える
2
$manager = Doctrine_Manager::getInstance();
$manager->setAttribute(Doctrine_Core::ATTR_USE_DQL_CALLBACKS, false);

この後、softDelete がオフのようにデータを選択、更新、削除できます。

于 2011-09-12T06:33:16.447 に答える
2

ソースhereおよびhereをざっと見てみると、この機能は動作によって提供されていないようですSoftDeletewhereあなたが提案するように、句を手動で追加する必要があります。

(私は間違っているかもしれませDoctrine_Queryんが、 のような動作によって動的に拡張することはできないと確信していDoctrine_Recordます。を追加する特別なサブクラスをいつでも作成できますが、それは価値があるよりも多くのように思えます :) )Doctrine_QueryincludeDeleted()

于 2009-09-01T21:29:56.520 に答える
1

Doctrine 1.2.2 にバグがあり、ATTR_USE_DQL_CALLBACKS が無視され、softdelete カラムの名前が間違っていました。解決策は、リスナーを上書きすることです。

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

ダミークラスで:

class MockListener implements Doctrine_Overloadable
{
    public function __call($m, $a){}
}
于 2010-08-17T13:25:08.390 に答える