Doctrine orm 条令-QueryBuilder,选择带有何处参数的查询:实体还是ID?

Doctrine orm 条令-QueryBuilder,选择带有何处参数的查询:实体还是ID?,doctrine-orm,Doctrine Orm,我有一个产品实体和一个商店实体 一个商店可以有0到n个产品,并且一个产品只能在一个商店中 因此,产品实体表通过Shop_id表字段引用Shop实体 使用条令查询生成器查询给定商店的产品时,我们可以执行以下操作: $products = $this->getDoctrine()->getRepository('MyBundle:Product') ->createQueryBuilder('p') ->

我有一个产品实体和一个商店实体

一个商店可以有0到n个产品,并且一个产品只能在一个商店中

因此,产品实体表通过Shop_id表字段引用Shop实体

使用条令查询生成器查询给定商店的产品时,我们可以执行以下操作:

    $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而不是实体实例,例如:在引用另一个实体的条令实体字段上


我最初认为只有第一个示例可以工作…

我可能错了,但我认为如果您传递的是对象实例而不是id号,则条令会自动调用$instance->getId,使您的两个查询在转换为SQL甚至DQL时相同。

我可能错了,但我认为,如果您传递的是对象实例而不是id号,则条令将自动调用$instance->getId,使您的两个查询在转换为SQL甚至DQL时相同。

根据条令文档,如果对象是托管的,您可以将对象传递给setParameter

文件摘录:

调用setParameter会自动推断将哪种类型设置为值。这适用于整数、字符串/整数数组、日期时间实例和托管实体

有关更多信息,请参阅:

根据条令文档,如果对象被管理,您可以将该对象传递给setParameter

文件摘录:

调用setParameter会自动推断将哪种类型设置为值。这适用于整数、字符串/整数数组、日期时间实例和托管实体

有关更多信息,请参阅: