2

Product エンティティと Shop エンティティがあります。

ショップは 0 から n 個の商品を持つことができ、商品は 1 つのショップにのみ存在できます。

したがって、product エンティティ テーブルは、shop_id テーブル フィールドを通じて Shop エンティティを参照しています。

doctrine query builder を使用して特定のショップの商品をクエリする場合、次のようにできます。

    $products = $this->getDoctrine()->getRepository('MyBundle:Product')
                ->createQueryBuilder('p')
                ->where('p.shop = :shop')
                ->setParameter('shop', $shop)  // here we pass a shop object
                ->getQuery()->getResult();

またはこれ:

    $products = $this->getDoctrine()->getRepository('MyBundle:Product')
                ->createQueryBuilder('p')
                ->where('p.shop = :shopId')
                ->setParameter('shopId', $shopId)  // we pass directly the shop id
                ->getQuery()->getResult();

そして、両方ともうまくいくようです...私は疑問に思っています:そのような場合(つまり、別のエンティティを参照するドクトリンエンティティフィールドで)、エンティティインスタンスの代わりにエンティティIDを常に直接渡すことができますか?

私は当初、最初の例だけがうまくいくと思っていました...

4

2 に答える 2

3

DoctrineのドキュメントによるとsetParameter()、オブジェクトが管理されている場合、オブジェクトを渡すことができます。


ドキュメントから抽出:

setParameter() を呼び出すと、値として設定するタイプが自動的に推測されます。これは、整数、文字列/整数の配列、DateTime インスタンス、およびマネージド エンティティに対して機能します。

詳細については、次を参照してください。

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/query-builder.html#binding-parameters-to-your-query

于 2015-04-02T09:39:33.990 に答える
1

私は間違っているかもしれませんが、id 番号の代わりにオブジェクト インスタンスを渡すと、Doctrine が自動的に呼び出し$instance->getId()て、SQL (DQL でさえも) に変換されたときに 2 つのクエリを同じにするようになると思います。

于 2013-05-15T19:04:00.180 に答える