【问题标题】:Doctrine 2: How to get last status from dedicated status table原则 2:如何从专用状态表中获取最后状态
【发布时间】:2015-06-12 15:50:43
【问题描述】:

我有两个表:邮件和状态。

CREATE TABLE mail
(
  mail_id integer NOT NULL,
  mail_from character varying NOT NULL,
  mail_to character varying NOT NULL,
  subject character varying NOT NULL,
  text text,
  CONSTRAINT mail_pkey PRIMARY KEY (mail_id)
)

CREATE TABLE mail_status
(
  status_id integer NOT NULL,
  mail_id integer NOT NULL,
  code integer NOT NULL,
  CONSTRAINT mail_status_pkey PRIMARY KEY (status_id)
)

如何使用 Doctrine 2 获取所有带有最后状态码且状态码 = 1 的邮件行。

例如SQL:

SELECT mail.*
FROM mail
WHERE (SELECT code FROM mail_status WHERE mail_status.mail_id = mail.mail_id ORDER BY mail_status.status_id DESC LIMIT 1) = 1

【问题讨论】:

  • 您在创建查询时需要帮助吗?或者在 php 上执行查询?如果您首先需要帮助,如果您在 SqlFiddle 上提供这样的架构 sqlfiddle.com/#!3/5c2bd/3
  • 我需要帮助使用 Doctrine 2 QueryBuilder 在 php 上执行查询。

标签: php sql postgresql doctrine-orm


【解决方案1】:

在 MailBundle/Entity/Repository/MailRepository 中

public function findEmailsByStatusCode($code)
{ 
    $qb = $this->getEntityManager()->createQueryBuilder('mail');
    $qb
        ->select('mail')
        ->from('Path\MailBundle\Entity\Mail', 'mail')
        ->join('mail.statuses', 'mailStatus')
        ->where('mailStatus.code = :code'))
        ->orderBy('mailStatus.creationDate', 'DESC')
        ->groupBy('mail.mail_id')
        ->setParameter('code', $code)
    ;

    $query = $qb->getQuery();

    return $query->getResult();
}

然后从控制器调用

$mailRepository = $this->getDoctrine()->getRepository('MailBundle:Mail');
$email = $mailRepository->findEmailsByStatusCode(1);

【讨论】:

  • 感谢您的帮助!但是此查询获取所有状态。 mail_status 表包含所有状态历史。您的查询会获取所有邮件状态。
  • 对不起,我对你写的查询感到困惑,再检查一遍,它将把所有最后状态为真的电子邮件都带上
  • 我有错误:“错误:'ms' 不指向 ResultVariable”。
  • 也许需要使用“orderBy('ms.statusId', 'DESC')”?
  • 再试一次,忘了加status属性,能不能给你写MailStatus和Mail类?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
  • 2019-12-23
  • 2010-11-06
  • 1970-01-01
  • 2018-10-28
相关资源
最近更新 更多