【发布时间】:2020-01-20 08:29:38
【问题描述】:
我想问一下,我可以检索关系中最后的外键数据吗?。
在这种情况下,我想检索最后一个用户交易数据。
例如在3个月前到现在的交易表中有一些交易数据如下。
{
"current_page": 1,
"data": [
{
"id": 8,
"user_id": 1,
"type": "sell",
"created_at": "2019-12-11 11:55:31",
"updated_at": "2019-12-11 11:55:31",
"tax": null,
"invoice_number": null,
"name": "Fredy"
},
{
"id": 7,
"user_id": 1,
"type": "buy",
"created_at": "2019-11-20 17:14:55",
"updated_at": "2019-11-20 17:14:55",
"tax": null,
"tax_percent": "0.90",
"invoice_number": null,
"name": "Fredy"
},
{
"id": 6,
"user_id": 8,
"type": "buy",
"created_at": "2019-11-20 16:28:33",
"updated_at": "2019-11-20 16:28:33",
"tax": null,
"name": "Tommy"
},
{
"id": 5,
"user_id": 2,
"type": "buy",
"created_at": "2019-11-20 15:47:57",
"updated_at": "2019-11-20 15:47:57",
"tax": null,
"name": "Sarah"
},
{
"id": 4,
"user_id": 3,
"type": "buy",
"created_at": "2019-11-20 15:47:31",
"updated_at": "2019-11-20 15:47:31",
"tax": null,
"name": "John Doe"
},
],
}
这是我制作的示例代码
public function index()
{
$start = Carbon::now()->subMonths(3)->format('Y-m-d') . ' 00:00:00';
$end = Carbon::now()->format('Y-m-d') . ' 23:59:59';
return $query = DB::table('transaction')
->join('users', 'users.id', '=', 'gold_transaction.user_id')
->select('transaction.id', 'user_id', 'users.*')
->whereBetween('transaction.created_at', [$start, $end])
->whereIn('transaction.id', [DB::raw("SELECT MAX(transaction.id) FROM transaction GROUP BY user_id")])->get();
}
如果我只想为所有用户显示自上次交易起超过 7 天未进行交易的用户,我该怎么办?
谢谢。
【问题讨论】:
-
那么您当前查询的错误是什么?
-
我写的代码没有错。只是,我想检索用户数据,如果事务中有相同的外键,我只想检索最后一个外键数据并且没有相同的外键。然后调出不进行交易的用户,从交易的最后一条数据开始,直到 7 天以上。我可以在查询生成器中使用条件吗?还是有其他方法? @Qonvex620
-
检查 stackoverflow.com/questions/1313120/… 并了解如何将这些查询之一转换为 eloquent/query builder。我知道它被标记为 MySQL,但其中许多查询都是纯 SQL,应该适用于 Postgres
-
请检查我的答案。
-
@apokryfos 我会试试的。谢谢
标签: laravel postgresql eloquent