Symfony2 在外键上传递参数返回总是 null

Posted

技术标签:

【中文标题】Symfony2 在外键上传递参数返回总是 null【英文标题】:Symfony2 passing parameter on foreign key return always null 【发布时间】:2016-08-12 13:13:01 【问题描述】:

如何在外键上传递参数

Class Product

/**
 * @var int
 *
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var Group
 *
 * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Group")
 * @ORM\JoinColumn(name="group_id", referencedColumnName="id", onDelete="CASCADE")
 */
private $group;

 /**
 * @var string
 *
 * @ORM\Column(name="alt_number", type="string", length=255)
 */
private $altproducts;

 /**
 * @var string
 *
 * @ORM\Column(name="product", type="string", length=255)
 */
private $product;

产品回购:

public function GetProducts($product, Group $group)
       $results = $this->createQueryBuilder('p')
        ->where('p.product= :product')
        ->andwhere('p.group= :group')
        ->setParameter('product',$product)
        ->setParameter('group',$group)
        ->getQuery()->getResult();
        return $results;
 

在服务中:

// Param $group is an Object of Group Class
 $ProductList= $this->entityManager->getRepository(Product::class)->GetProducts($product,$group); 

总是空的;

当我执行->getSQL() 时,我有正确的 SQL 语法 SELECT i0_.id AS id_0, i0_.product AS product,i0_.description AS description_2, i0_.group_id AS group_id_3, i0_.altproducts AS altproducts_4, FROM Product i0_ WHERE i0_.product = ? AND i0_.group_id = ?

我需要根据产品编号和 groupID 获取 altProducts 数组。

我做错了什么?

【问题讨论】:

您希望查询返回什么?如果您将特定产品和组实体作为参数传递给它,它不会返回列表 - 如果您的数据库中碰巧有匹配的产品行(即引用特定的组行)... 我还是不太明白你的目标:如果你用产品和组实体查询,你会得到 0 或 1 个产品实体作为结果(在数组中) - 这个产品实体(如果它被发现)将有 1 个 altProducts 值。如果这是您所追求的,那么我会说您的查询看起来不错 - 您能否检查分析器中的可运行查询并检查您的数据库中是否存在这些产品和组行(+ 参考)。 啊,废掉最后一条评论——把你的产品实体和实体中的产品变量混为一谈。检查分析器部分仍然有效:) 是的,它是有效的。在 mysql 术语中,SELECT alt_numbers Where product = 'asdf' AND group_id = '3' 是一个数组,这是我想要做的。还有为什么当产品不是唯一的并且getResult 应该返回一个数组时我会得到 0 或 1 个产品实体 '我需要根据产品编号和 groupID 获取 altProducts 数组。'在您的问题中,意味着只有 0/1 结果。但是如果我现在理解正确的话,这个定义中应该有“产品名称”(或者至少产品编号不引用实体ID)? 【参考方案1】:

如果您尝试获取特定组的所有产品,则不应将特定产品实体作为参数传递:

public function GetProducts(Group $group)

       $results = $this->createQueryBuilder('p')
        ->where('p.group= :group')
        ->setParameter('group',$group)
        ->getQuery()->getResult();

        return $results;
 

【讨论】:

我添加了完整的实体,我需要获取具有组 ID 的产品的 altproducts

以上是关于Symfony2 在外键上传递参数返回总是 null的主要内容,如果未能解决你的问题,请参考以下文章

我应该在外键上使用 onDelete=cascade 吗?

在外键上按字段过滤

Oracle SQL Developer - 在外键上添加约束

当我们调用函数时,如果没有像func这样的参数传递,则需要参数括号();与函数(); [关闭]

试图在外键上加入表,但输出不正确。 CRUD 也没有完全工作

Symfony2,如何使用 KnpPaginatorBundle 和 QueryBuilder 传递参数排序和方向