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属性,你能写出你的邮件状态和邮件类别吗?