【问题标题】:Get most recent message sent to user per user [duplicate]获取每个用户发送给用户的最新消息[重复]
【发布时间】:2019-04-13 06:41:33
【问题描述】:

我正在尝试以与 twitter 处理相同的方式对来自用户的消息进行排序。因此,应该列出每个向我发送消息的用户,并在下面列出他们给我的最新消息。

我试图得到这个的查询似乎对我有用,但它没有。它返回用户发送给我的第一条消息,所以相反。

这是我的查询:

$messages = Message::with('user')->where('target_user_id', Auth::user()->id)
->latest()->groupBy('user_id')->get();

消息表如下所示:

id
message
user_id ( user sending the message id)
target_user_id ( user the message is sent to id)

我已经尝试过人们指示我复制的方法,但没有成功。我得到了相同的结果和我当前的查询。

这是我尝试过的:

$messages = Message::with('user')->where('target_user_id', Auth::user()->id)
->select(DB::raw('t.*'))
->from(DB::raw('(SELECT * FROM messages ORDER BY created_at DESC) t'))
->groupBy('t.user_id')
->get();

【问题讨论】:

    标签: php laravel laravel-5 eloquent


    【解决方案1】:

    尝试使用distinctorderBy 并检查是否适用于您的问题:

    $messages = Message::with('user')
                       ->where('target_user_id', Auth::user()->id)
                       ->orderBy('created_at', 'desc')
                       ->distinct('user_id')
                       ->get();
    

    【讨论】:

    • 我认为不同的 user_id 是你想要的。
    • 你是对的,@Devon。谢谢!
    • @Laerte 试过这个,我不认为 distinct 真的能满足我的需要。这仍然会返回来自同一用户的多条消息。我不会只显示来自每个用户的 1 条消息,它应该是最新消息。
    猜你喜欢
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    • 2016-11-02
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    相关资源
    最近更新 更多