2017-01-30 5 views
2

私のデータベースにデータを保存しています。データは、私は明確なupload_monthを取得しようとしています私のコントローラ内でこのデータベースからの最新のデータ

id | upload_month | created_at 
----------------------------------------- 
1 | January  | 2017-01-30 13:22:39 
----------------------------------------- 
2 | Febuary  | 2017-01-30 13:23:42 
----------------------------------------- 
3 | January  | 2017-01-30 13:25:33 

のように見えるが格納されているが、最新ではそれぞれのバージョンを挿入します。現時点では私はこの問題は、これが、それは、古いバージョンを与えている1月の記録のためにしたがって、次の

id | upload_month | created_at 
----------------------------------------- 
1 | January  | 2017-01-30 13:22:39 
----------------------------------------- 
2 | Febuary  | 2017-01-30 13:23:42 
----------------------------------------- 

を返しているということです

$uploadedFile = UploadedFile::groupBy('upload_month')->orderBy('created_at', 'desc')->get(); 

をしようとしています。私が->orderBy('created_at', 'asc')に変更すると、同じレコードが返されますが、2月が最初の行になります。エッセンスで

は、私が後だと、この

id | upload_month | created_at 
----------------------------------------- 
1 | January  | 2017-01-30 13:25:33 
----------------------------------------- 
2 | Febuary  | 2017-01-30 13:23:42 
----------------------------------------- 

どのように私はこれを達成することができていますか?

おかげ

+1

https://laravel.com/docs/5.4/queries#selectsはhttps://laravel.com/api明確な方法を試してみてください/5.4/Illuminate/Database/Query/Builder.html#method_distinct;) –

+0

私が別名を使用していなかった唯一の理由は、elequentを使用するのではなく、未処理のDBクエリを実行しているからです。 –

+0

Eloquentは私が知っているようにクエリーを作成しません。 –

答えて

2

あなたはGROUP BYすべてのフィールドは、あなたが、ノー一つだけを選択したいはずです。この記事では、この問題を説明します。この場合、https://www.psce.com/blog/2012/05/15/mysql-mistakes-do-you-use-group-by-correctly/

適切なSQLクエリは次のようになります。

SELECT id, upload_month, created_at 
    FROM uplodaded_file 
    JOIN (SELECT upload_month, MAX(created_at) created_at 
      FROM uplodaded_file 
     GROUP BY upload_month) months 
    ON upload_month = months.upload_month 
    AND created_at = months.created_at 

本の雄弁なバージョンは少しトリッキーです。この場合、生の問合せを使用する方が良いでしょう。

1

あなたが代わりのOrderByの最新()メソッドを使用する必要があります

UploadedFile::latest()->distinct()->get(); 
+0

不幸にもそれは独特の月を返さない。私はすべての3つの結果が返されています。 –

+0

groupBy( '​​upload_month')と最新のものを試してみてください。 –

+0

これは2ヶ月間返されますが、最新の1月1日は返されません –

関連する問題