Php 原则2:如何从专用状态表中获取最后一个状态

Php 原则2:如何从专用状态表中获取最后一个状态,php,sql,postgresql,doctrine-orm,Php,Sql,Postgresql,Doctrine Orm,我有两个表:邮件和状态 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

我有两个表:邮件和状态

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)
)
如何使用条令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

在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);

创建查询是否需要帮助。还是在php上执行查询?如果您需要关于first的帮助,如果您像这样在SqlFiddle上提供一个模式,我需要帮助使用Doctrine 2 QueryBuilder在php上执行查询。谢谢您的帮助!但此查询获取所有状态。mail_状态表包含所有状态历史记录。您的查询将获取所有邮件状态。很抱歉,我对您编写的查询感到困惑,请再次检查,它将显示所有具有最后状态的电子邮件。我有错误:“错误:'ms'不指向ResultVariable”。可能需要使用“orderBy('ms.statusId','DESC')”?重试,忘记添加status属性,你能写出你的邮件状态和邮件类别吗?