我在Symfony 2中有一个查询,我试图只返回带有连接的表中的唯一值以及这些唯一值的总和。
例如:
Inventory Table:
id | product_id | qty | warehouse_id
----------------------------------------
1 | 123 | 5 | 1
2 | 123 | 5 | 1
3 | 123 | 5 | 1
4 | 234 | 5 | 1
5 | 345 | 5 | 1
6 | 345 | 5 | 1
7 | 345 | 5 | 1
8 | 345 | 5 | 1
9 | 345 | 5 | 1
10 | 345 | 5 | 1
Product Table:
id | name | sku | description |
------------------------------------------------
123 | Test 123 | Test 123 | Test 123
234 | Test 234 | Test 234 | Test 234
345 | Test 345 | Test 345 | Test 345
所以最后,我在数组中需要的是以下信息以及从连接返回的内容:
product_id: 123 qty: 15
product_id: 234 qty: 5
product_id: 345 qty: 30
这是我的完整查询......我只是不太确定如何在Symfony 2中使用该学说。谢谢你的帮助!
$search_string = trim($search_string);
$em = $this->getEntityManager();
$query = $em->createQuery("
SELECT i, p, il, w
FROM WIC\InventoryBundle\Entity\Inventory i
LEFT JOIN i.product p
LEFT JOIN i.inventoryLocation il
LEFT JOIN il.warehouse w
WHERE (p.name LIKE :tag OR p.sku LIKE :tag OR p.description LIKE :tag)
AND p.account = :account_id
AND il.warehouse = :location_id");
$query->setParameters(array(
'tag' => "%$search_string%",
'account_id' => $account_id,
'location_id' => $location_id
));
return $query->getArrayResult();
答案 0 :(得分:0)
你可以尝试
$search_string = trim($search_string);
$q = $this->getEntityManager()
->getRepository('YourBundle:Inventory')
->createQueryBuilder('i');
$query = $q->select('SUM(DISTINCT(i.qty))')
->leftJoin('i.product', 'p')
->leftJoin('i.inventoryLocation', 'il')
->where($q->exp()->like('p.name', ':tag')
->orWhere($q->exp()->like('p.sku', ':tag')
->orWhere($q->exp()->like('p.description', ':tag')
->andWhere('p.account = :account_id')
->andWhere('il.warehouse = :location_id')
->setParameter('tag', $q->expr()->literal("%$search_string%"))
->setParameter('account_id', $account_id)
->setParameter('location_id', $location_id)
->getQuery();
return $query->getResult();
我没有确切地知道你的实体字段名是什么,所以根据你在实体映射中真正拥有的内容来纠正它们