0
Laravelの関数でgroupByを使用しようとしています。ここに私のクエリlaravelの雄弁で "with"関数を使ってgroupByを使うことは可能ですか?
$msgs=Conversation::where('sender', $sender)
->orWhere('reciever', $sender)
->orderBy('created_at', 'desc')
->with('message')
->get();
このクエリは、メッセージテーブルから多くのレコードを返します。ですが、私は一つだけを取得したいです。
これはデータであり、Iはグループに任意の助けが高く評価される
{
"data": [
{
"id": 27,
"sender": 10,
"reciever": 4,
"created_at": "2017-07-26 22:46:04",
"updated_at": "2017-07-26 22:46:04",
"message": [
{
"id": 5,
"conversation_id": 27,
"last_sender": 10,
"msg": "5",
"deleted": null,
"seen": null,
"created_at": "2017-07-26 22:46:04",
"updated_at": "2017-07-26 22:46:04"
},
{
"id": 6,
"conversation_id": 27,
"last_sender": 10,
"msg": "6",
"deleted": null,
"seen": null,
"created_at": "2017-07-26 22:46:19",
"updated_at": "2017-07-26 22:46:19"
},
{
"id": 7,
"conversation_id": 27,
"last_sender": 10,
"msg": "7",
"deleted": null,
"seen": null,
"created_at": "2017-07-26 22:46:35",
"updated_at": "2017-07-26 22:46:35"
},
{
"id": 8,
"conversation_id": 27,
"last_sender": 10,
"msg": "8",
"deleted": null,
"seen": null,
"created_at": "2017-07-26 22:46:36",
"updated_at": "2017-07-26 22:46:36"
}
]
},
{
"id": 26,
"sender": 10,
"reciever": 7,
"created_at": "2017-07-26 22:40:02",
"updated_at": "2017-07-26 22:40:02",
"message": [
{
"id": 1,
"conversation_id": 26,
"last_sender": 10,
"msg": "1",
"deleted": null,
"seen": null,
"created_at": "2017-07-26 22:40:02",
"updated_at": "2017-07-26 22:40:02"
},
{
"id": 2,
"conversation_id": 26,
"last_sender": 10,
"msg": "2",
"deleted": null,
"seen": null,
"created_at": "2017-07-26 22:45:36",
"updated_at": "2017-07-26 22:45:36"
},
{
"id": 3,
"conversation_id": 26,
"last_sender": 10,
"msg": "3",
"deleted": null,
"seen": null,
"created_at": "2017-07-26 22:45:50",
"updated_at": "2017-07-26 22:45:50"
},
{
"id": 4,
"conversation_id": 26,
"last_sender": 10,
"msg": "4",
"deleted": null,
"seen": null,
"created_at": "2017-07-26 22:45:57",
"updated_at": "2017-07-26 22:45:57"
}
]
}
]
}
メッセージオブジェクトからの結果が欲しいです。物事が明確でない場合は教えてください。ありがとうございました。
ありがとうございました。しかし、これは私が望むものではありません。このクエリは1に制限されていますが、結果をグループ化します。 'sender' =の' conversations'からselect *を選択すると、 "string(93)"というクエリが表示されている可能性があります。または 'reciever' =? 'created_at'によって"? "で'?messages'''conversation_id'が選択されましたdescend 1 " string(104)" select * by created_at' desc "string(104) 'messages'から' messages'.conversation_id'を 'created_at'のdesc limit 1" " – sadek
で取得したと思いますので、コールバックの中に何でも適用できます( 'conversation_id'、['value1'、 'value2']) - > orderBy( 'created_at')は、次のようになります: ' - > with(['message' => function($ query){ return $ query-> 、 'desc') - > first(); ' }]) – Sletheren
もう一度ありがとうございます。しかし、運がない。これは私が "Conversation :: where( 'sender'、$ sender) - > orWhere( 'reciever'、$ sender) - > orderBy( 'created_at'、 'desc') - > with([ 'message' => function($ query){ $ query-> whereIn( 'conversation_id'、['msg'、 'seen']); }])> get(); " メッセージオブジェクトには何も値を与えません。 私が気づいた事は、ほとんど何でも使用できますが、コールバックでgroupByを使用することはできません。 – sadek