如何使用带有 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();
消息表列是
| 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();