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
的索引
我有一个数据库 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
的索引