我正在研究简单的邮资跟踪系统,我试图用这个查询做的是返回带有最新跟踪状态名称的包裹。
我曾经DB::select
执行过这个查询,它工作得很好,但我不能用paginate
它。
DB::select(DB::raw('SELECT p.*,
(SELECT status.name
FROM status
INNER JOIN tracking
ON tracking.status_id = status.id
WHERE tracking.package_id = p.id
ORDER BY tracking.id DESC
LIMIT 1) AS status_name
FROM packages AS p
WHERE p.is_deleted = 0
ORDER BY p.id DESC'));
那么有什么办法可以使用paginate
它..?或者我可以使用DB::table
而不是DB::select
这是我的桌子
packages table:
+----+-------------+------------+
| id | tracking_no | account_no |
+----+-------------+------------+
| 3 | 852369 | 90905 |
+----+-------------+------------+
tracking table:
+----+------------+-----------+
| id | package_id | status_id |
+----+------------+-----------+
| 3 | 3 | 1 |
| 9 | 3 | 2 |
| 10 | 3 | 3 |
+----+------------+-----------+
status table:
+----+------------------+
| id | name |
+----+------------------+
| 1 | Ready |
| 2 | Out for delivery |
| 3 | Delivered |
+----+------------------+
这是我的查询
SELECT p.*,
(SELECT status.name
FROM status
INNER JOIN tracking
ON tracking.status_id = status.id
WHERE tracking.package_id = p.id
ORDER BY tracking.id DESC
LIMIT 1) AS status_name
FROM packages AS p
WHERE p.is_deleted = 0
ORDER BY p.id DESC