【发布时间】: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)?
标签: php symfony doctrine-orm