如何使用带有 laravel 的 hasMany 获取用户的最后一条消息

How do I get users last message using hasMany with laravel

消息表列是

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

User_id 有发件人用户的 ID。 Target_id 有接收者用户的 id

并且简单用户 table 通过 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();
      

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

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

您的 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();