gpt4 book ai didi

mysql - 将多个 SELECT 规则转换为单个 DQL 查询

转载 作者:行者123 更新时间:2023-11-29 11:29:19 24 4
gpt4 key购买 nike

我正在使用 Symfony 2.7Doctrine 开发一个项目。该项目管理不同的实体:一个用户可以拥有任意数量的订单,其中包括一个或多个OrderItems

现在我想包含一个消息传递组件,它允许自动向用户发送电子邮件。每条消息都有自己的一组规则,用于指定应接收该消息的用户

示例:

  • 所有用户
  • 用户编号在 X 和 Y 之间的用户
  • 用户 姓氏为“Doe”
  • 用户至少有一个订单
  • 用户 拥有 OrderOrderItem XY
  • 订单尚未付款的用户
  • 等等

问题是:是否可以将消息的所有规则转换为一个 DQL SELECT 查询?

将仅影响用户的规则组合到一个查询中是没有问题的:

public function getMatchingUsers($rules) {
$qb = $this->em->createQueryBuilder();

$qb_expense->select('u')
->from('AppBundle:User', 'u');

foreach ($rules as $rule) {
$property = $rule->getProperty();
$operator = $rule->getOperator(); // --> =, !=, <, >, <= or >=
$value = $rule->getValue();

switch ($property) {
case ($property == UserMessage::FUNC_USER_NO): {
$qb
->andWhere('u.userNo :operator :value')
->setParameter('operator', $operator)
->setParameter('value', $value);
break;
}
case ($property == UserMessage::FUNC_NAME): {
$qb
->andWhere('u.name = :value')
->setParameter('value', $value);
break;
}
...
}
}

...
}

但是如何添加/包含影响用户但影响他的订单甚至OrderItems的规则?

问题是,不同的规则需要不同的查询(简单的 SELECT、带 JOIN 的 SELECT、订单计数等)

这个问题可以通过一次查询解决吗?

最佳答案

Doctrine 查询构建器有一个名为 addSelect() 的方法,您可以添加不同的选择语句。

$qb
->select('u')
->from('AppBundle:User', 'u');

if(condition)
{
$qb->addSelect('o')
->join('u.orders', 'o');
}

Doctrine Docs

关于mysql - 将多个 SELECT 规则转换为单个 DQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37682820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com