Показать только последнюю запись с помощью laravel построителя запросов - PullRequest
0 голосов
/ 12 июля 2020

У меня есть две таблицы: таблица платежей и таблица арендаторов. В каждой таблице платежей может быть много платежей для одного арендатора (отношение один ко многим)

Payments 
id    tenant_id   amount 
1     1                  5000    
2     1                  6000
3     2                  7000    
4     2                  8000

tenants 
id    name         email
1     peter         peter@info.com
2     grace         grace@info.com

Когда я запускаю следующее в своем контроллере

public function getPaymentsList(Request $request)
    {
       $payments = DB::table("payments")
       ->join('tenants','tenants.id','=','tenant_id')
       ->select('payments.id','payments.tenant_id','tenants.name','payments.rent_to')
       ->groupBy('tenant_id')->get()
;      
      
 return  response()->json($payments);
    }
   
}

, я получаю json самая старая запись в таблице платежей, а не последняя запись.

[
{
"id": 1,
"tenant_id": 1,
"name": "peter",
"amount": "5000"
},
{
"id": 3,
"tenant_id": 2,
"name": "grace",
"amount": "7000"
},
]

The output i want is

[
{
"id": 2,
"tenant_id": 1,
"name": "peter",
"amount": "6000"
},
{
"id": 4,
"tenant_id": 2,
"name": "grace",
"amount": "8000"
},
]

Как улучшить приведенный выше запрос, чтобы он мог отображать желаемый результат?

1 Ответ

0 голосов
/ 12 июля 2020

вы можете использовать что-то вроде:

public function getPaymentsList(Request $request)
{
   $payments = DB::table("payments")
   ->join('tenants','tenants.id','=','tenant_id')
   ->select('payments.id','payments.tenant_id','tenants.name','payments.rent_to')
   ->groupBy('tenant_id')->latest()->first()
;      
      
 return  response()->json($payments);
    }
   
}

проверьте личный код документы на предмет использования latest()->first()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...