【问题标题】:How do I get users last message using hasMany with laravel如何使用 hasMany 和 laravel 获取用户最后一条消息
【发布时间】:2021-02-03 23:16:04
【问题描述】:

消息表列是

| messages_id(pk) | user_id | target_id | message | created_at

User_id 有发送者用户的 id。 Target_id 有接收者用户的 id

简单的用户表与 HasMany 的 MessageTable 有关系。

public function message()
{
  return $this->hasMany('App\Model\TableModel\Message', 'user_id', 'user_id');
}

我想获取用户数据和从 user_id=[1,2,3,4] 到 target_id = 5 的每条最后一条消息。

所以我尝试了这个

User::WhereIn(user_id, [1,2,3,4])
     ->with(['message' => function ($query) {
          $query->Where('target_id', 5)->orderBy('messages_id', 'desc)->first();
        }])->get();
      

但是这个查询返回用户的数据和一个用户的最后一条消息。

如何使用 hasMany 获取用户最后一条消息?

【问题讨论】:

标签: laravel relational-database


【解决方案1】:

您的hasMany 关系不正确: 第三个参数应该是当前模型的主键:

public function message()
{
  return $this->hasMany('App\Model\TableModel\Message', 'user_id', 'id');
}

无论如何,要获得最后一条消息,我建议使用 hasOne 关系建立一个新关系:

 public function lastMessage()
    {
      return $this->hasOne('App\Model\TableModel\Message', 'user_id', 'id')->latest();
    }

现在,您可以像这样使用这个新关系:

User::WhereIn(user_id, [1,2,3,4])
     ->with(['lastMessage' => function ($query) {
          $query->Where('target_id', 5);
        }])->get();

【讨论】:

  • 谢谢大侠。我正在寻找最新的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
  • 1970-01-01
  • 2013-06-13
  • 2015-12-16
相关资源
最近更新 更多