【发布时间】:2020-01-06 16:54:59
【问题描述】:
我正在使用 DISTINCT ON 从两个连接的表中获取最新的行。在我的情况下,订阅者属于许多类别,我需要获取订阅者所属的最新类别。我已经让它在原始查询中工作,但我需要使用 Eloquent 重新创建它。
SELECT DISTINCT ON (subscribers.id) subscribers.*,
subscriber_categories.*
FROM subscribers
LEFT JOIN subscriber_categories
ON subscribers.id = subscriber_categories.subscriber_id
ORDER BY subscribers.id, subscriber_categories.created_at DESC;
我尝试了以下但没有工作。它正在从两个表中获取所有记录:
Subscribers::
->join('subscriber_categories', 'subscribers.id', '=', 'subscriber_categories.subscriber_id')
->distinct('subscribers.id')
->latest('subscribers.id', subscriber_categories.created_at)
->paginate(7);
【问题讨论】:
-
在 laravel 中
distinct()不接受任何参数:laravel.com/docs/6.0/queries#selects 它只是添加SELECT DISTINCT所以它是一个不同的所有选定字段。在您的情况下,它什么也不做,因为每个订阅者几乎与其他订阅者的主键不同。您可以通过添加 ->toSql() 来调试您的查询。 -
是的,我也想要 ->toSql()。
-
好的,在您调试查询之后,如果需要,您可以随时在此处询问更多详细信息。您可以随时编辑您的问题。
标签: sql laravel postgresql eloquent