【发布时间】:2022-06-17 17:59:51
【问题描述】:
我正在寻找与状态匹配的多个 Items 对象(在订单中):
我有 3 张桌子:
- 项目。
- 订单(带有编号顺序、状态等)OneToMany 和 OrderDetails, 带有项目的多对一。
- OrderDetails(包含 1 个订单的详细信息:id_item、orders_id...) ManyToOne with Orders, , ManyToOne with Items。
订单(带状态)-> OrderDetails(带项目)
我想为“example”('Order.state')写请求:
$order = $this->entityManager->getRepository(OrderDetails::class)->findBy(['items => $id_item, 'Order.state' => 2], ['id' => 'desc ']);
如何正确编写此查询?也许我需要项目存储库中的功能? 提前致谢。
编辑(在您的帮助下,谢谢): 我在存储库中添加功能: 第一次我做了一个 sql 查询并在 phpmyadmin 中对其进行了测试,以确定我想要什么: 我的 sql(可能不完美,但可行)
SELECT
i.id,
c.state_id,
i.items_number,
o.quantity,
u.code,
u.id AS idcustomer,
c.customers_id
FROM
items AS p,
order AS c,
order_details AS o,
customers AS u
WHERE
c.state_id = 1
AND i.id = 1
AND c.customers_id = u.id
这是我在 symfony 中的代码,但在 JOIN 中出现错误(我不确定语法)。
$query = $entityManager->createQuery(
'SELECT
p.id,
c.state_id,
i.itemno,
o.quantity,
u.code,
u.id AS idcustomer,
c.customers_id
JOIN
i.Items o,
o.Order c,
c.Customers u
FROM
App\Entity\Items AS i,
App\Entity\Order AS c,
App\Entity\OrderDetails AS o,
App\Entity\Customers AS u
WHERE c.state_id IN (:ostate)
AND i.id IN (:items_id)
AND c.customers_id IN (u.id)
'
)->setParameter('items_id', $items_id)
->setParameter('ostate', $ostate);
return $query->getResult();
【问题讨论】:
-
是的,您不能将 findBy、findOneBy 与另一个实体的属性一起使用,因此您需要使用 DQL(或 sql)在存储库中执行自己的功能
-
你必须遵循 Symfony 文档:symfony.com/doc/current/…
标签: symfony multidimensional-array repository where-clause entitymanager