[英]Laravel get latest row on joined table
我有這個查詢
$schedules = DB::table('project_schedule_reimbursments')
->where('project_schedule_reimbursments.project_id', $id)
->join('costs', 'costs.id', '=', 'project_schedule_reimbursments.cost_id')
->join('general_statuses', 'general_statuses.reimbrse_id', '=', 'project_schedule_reimbursments.id')
// ->join('statuses', function ($join) {
// $join->on('general_statuses.status_id', '=', 'statuses.id');
// })
->join('statuses', 'statuses.id', '=', 'general_statuses.status_id')
->select(
'project_schedule_reimbursments.id as id',
'project_schedule_reimbursments.description as description',
'costs.short_description as cost_name',
'project_schedule_reimbursments.amount as amount',
'project_schedule_reimbursments.spent_date as spent_date',
'project_schedule_reimbursments.created_at as created_at',
'statuses.name as statusName', // this supposed to return latest row
DB::raw('max(general_statuses.created_at) as statusDate') // this is fixed now
)
->groupby('project_schedule_reimbursments.project_id')
->get();
這是我的數據庫截圖:
我需要從這個查詢中獲取最新的狀態詳細信息,即屏幕截圖中的row 8
,而不是我從row 1
獲取詳細信息,這意味着第一行而不是最新行。
問題是:我在哪里做錯了? 如何解決這個問題?
這是我現在收到的數據
[
{
"id":17,
"description":null,
"cost_name":"Biaya Interview",
"amount":null,
"spent_date":"2019-12-18 00:00:00",
"created_at":"2019-11-06 21:25:05",
"statusName":"Rejected", // this is from row 1 (incorrect)
"statusDate":"2019-12-20 09:14:46" // this is from row 8 (correct)
}
]
我需要獲取數據數組不能使用limit(1)
感謝Zar Ni Ko Ko
它返回了最新的行但是有一個小問題。
我添加了另一個報銷,所以當我選擇項目時,我應該有 2 個結果,每個結果都獲得最新狀態(似乎已修復)
所以現在我報銷了id 17
的最新狀態,該狀態來自此屏幕截圖的第 8 行。 但沒有報銷id 20
回報。
嘗試這個 ...
$schedules = DB::table('project_schedule_reimbursments')
->where('project_schedule_reimbursments.project_id', $id)
->join('costs', 'costs.id', '=', 'project_schedule_reimbursments.cost_id')
->join('general_statuses', 'general_statuses.reimbrse_id', '=', 'project_schedule_reimbursments.id')
// ->join('statuses', function ($join) {
// $join->on('general_statuses.status_id', '=', 'statuses.id');
// })
->join('statuses', 'statuses.id', '=', 'general_statuses.status_id')
->select(
'project_schedule_reimbursments.id as id',
'project_schedule_reimbursments.description as description',
'costs.short_description as cost_name',
'project_schedule_reimbursments.amount as amount',
'project_schedule_reimbursments.spent_date as spent_date',
'project_schedule_reimbursments.created_at as created_at',
'statuses.name as statusName', // this supposed to return latest row
DB::raw('max(general_statuses.created_at) as statusDate') // this is fixed now
)
->where('general_statuses.created_at', \DB::raw("(select max(`created_at`) from general_statues)"))
->groupby('project_schedule_reimbursments.project_id')
->get();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.