Symfony 5 中的 DQL 查询以获取子集的最新行

DQL query in Symfony 5 to fetch newest row of subset

我有一个数据库 table 名为“消息”,属性为 received, emitter, text, date。我想 select 用户收到的最后一条消息,最大日期。

使用此代码我得到空值,但用户在 table:

中有消息
 $message = $this->getEntityManager()
        ->createQuery(
            'SELECT m FROM App\Entity\Message m WHERE
                m.receiver = :user
                AND
                m.createdAt = (SELECT MAX(m1.createdAt) FROM App\Entity\Message AS m1)
            '
        )
        ->setParameters([
            'user' => $user
        ])
        ->getResult();

您的子查询不包含用户条件;它获取 max(created) 条消息,不一定是给定用户之一。但无论如何,子查询方法似乎都过于复杂了。

更简单的方法是:select 用户订单的消息已创建并限制为 1

在SQL

SELECT m.* FROM messages WHERE user_id=:user ORDER BY created DESC LIMIT 1

在 DQL 中

$this
    ->getEntityManager()
    ->createQuery('SELECT m FROM App\Entity\Message m WHERE
        m.receiver = :user
        AND
        m.createdAt = (SELECT MAX(m1.createdAt) FROM App\Entity\Message AS m1)
        ORDER BY m.createdAt DESC LIMIT 1
    ')
    ->setParameters([
        'user' => $user
    ])
    ->getResult();  

甚至更简单(使用条令存储库界面)

$entityMangager
  ->getRepository(Message::class)
  ->findOneBy(['user' => $user], ['created' => 'DESC'])

另外:您可能想确保在 table.

上有一个超过 user_id, created 的索引