【问题标题】:How to get the last row in with method relationships in laravel?如何在 laravel 中使用方法关系获取最后一行?
【发布时间】:2018-08-11 05:25:23
【问题描述】:

我正在尝试使用 laravel 构建一个聊天应用程序,我有两个表,一个用于 Conversations,另一个用于 Messages,我希望每个都有与最后一条消息的对话。这是我尝试过的查询:

$allConvs = Conversation::with(['messages' => function ($query) {
  $query->latest()->first();
}])    
->get();

但它只为第一个对话返回最后一条消息,而为其他对话返回 null。还有其他方法吗? 这是我的关系

Conversation.php

public function messages(){
  return $this->hasMany('App\Message', 'conversation_id','id')->latest();}

Message.php

    public function conversation()
{
    return $this->belongsTo('App\Conversation' ,'id', 'conversation_id');
}

【问题讨论】:

    标签: laravel-5 eloquent


    【解决方案1】:

    您可以使用HasOne 关系:

    public function latestMessage() {
        return $this->hasOne(Message::class)->latest();
    }
    
    $allConvs = Conversation::with('latestMessage')->get();
    

    这仍会在后台获取所有消息,但只显示每个对话的最新消息。

    【讨论】:

    • 像魅力一样工作!不知道有这个方法。
    猜你喜欢
    • 2022-11-23
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    • 2018-06-26
    • 2019-09-08
    • 1970-01-01
    • 2019-12-26
    相关资源
    最近更新 更多