Doctrine2では、データベースからロードされていないプロキシオブジェクトに対してdeleteを呼び出すことができます。
$user = $em->getPartialReference('model\User', array('id' => $id));
$em->remove($user);
それは、最初のクエリを必要としませんが、私はDoctrineはまだfushに内部的にそれをしないならば、非常にわからない:ただ、のようなものを「ダミー」オブジェクトを作成します。 SqlLogでは表示されません。
これを追加するだけで、これはまともなORMの予想される動作だと思います。物と関係を扱う。削除する前に何かが存在することを知る必要があります。 ORMはクエリジェネレータだけではありません。一般にネイティブクエリは、任意のORMで常に高速になります。どんなORMでも抽象レイヤーが追加され、実行には時間がかかります。これは典型的なトレードオフですが、あなたはいくつかの派手な機能ときれいなコードを手に入れますが、パフォーマンス上はいくらかゆるやかです。
EDIT:
私はそれはあなたのために働いてくれてうれしいです。実際に私は別の問題に遭遇し、プロキシと部分的なオブジェクトが実際に同じものではないことに気付きました。部分オブジェクトは実際のモデルクラスをインスタンス化し、必要な値で埋めます。部分オブジェクトを初期化した後、遅延ロードはもはや機能しません。たとえば、idだけの部分オブジェクトを作成し、別のオブジェクトフィールドがある条件を満たしている場合にのみ削除したい場合、その他のフィールドは常にnullになるため、機能しません。
一方、プロキシはレイジーローディングで動作し、部分的なオブジェクトが持つ問題を共有しません。そうでない場合は
$user = $em->getReference('model\User', $id);
$em->remove($user);
getReference
方法は、それがすでにロードされている場合は、オブジェクトまたはプロキシを返します。だから私は強く代わりに、あなたのような何かを行うことができ、getPartialReference
メソッドを使用しないようお勧めします。プロキシは、必要な場合には、他のすべての値を遅延ロードすることができます。あなたの例として、彼らはまったく同じように動作しますが、プロキシは確かに良い方法です。
ありがとうございました情報とclarificaiton – Rana