Doctrine の関係で入力される行を区別することは可能ですか?
例: ターゲット エンティティにdeleted
列がある 1 対多の関係があります。true
この列が設定された行がコレクションに入らないようにしたいと思います。
ドキュメントでこのようなものを見つけることができないため、これが不可能な可能性さえあります。
Doctrine の関係で入力される行を区別することは可能ですか?
例: ターゲット エンティティにdeleted
列がある 1 対多の関係があります。true
この列が設定された行がコレクションに入らないようにしたいと思います。
ドキュメントでこのようなものを見つけることができないため、これが不可能な可能性さえあります。
いいえ、ハイドレーション中に列を区別することはできません。
できることは、データベースからのすべてのデータをフィルタリングするSQL フィルターを使用するか、 Doctrine 2.3以降で利用可能な基準 API (ここでの例) を使用してゲッターのコレクションをフィルター処理することです。
public function getUsers()
{
$criteria = new \Doctrine\Common\Collections\Criteria();
$criteria->andWhere($criteria->expr()->eq('deleted', false));
return $this->users->matching($criteria);
}
フィルターを使用する「softdelete」拡張機能もあります。私の意見では、これはよりクリーンなソリューションであり、すべてのゲッターでタスクを繰り返す必要はありません。デフォルトでフィルタを有効にすることができます。レコードを削除する必要があるまれなケースでは、フィルタを無効にすることができます。パフォーマンスも向上すると思います: https://github.com/l3pp4rd/DoctrineExtensions