Laravel 关系过滤器,其中具有Elount的回调

Laravel 关系过滤器,其中具有Elount的回调,laravel,eloquent,wherehas,Laravel,Eloquent,Wherehas,鉴于以下模型 对话:id,用户id 消息:id,对话id,作者id,创建于 我想查询所有在$start和$end之间有消息的对话,所以我这样做了: $filterMessages = function($query) use ($start, $end) { $query->whereBetween("created_at", [$start, $end]); }; $convs = Conversation::whereHas("messages", $filterMessag

鉴于以下模型

对话:id,用户id

消息:id,对话id,作者id,创建于

我想查询所有在
$start
$end
之间有消息的对话,所以我这样做了:

$filterMessages = function($query) use ($start, $end) {
    $query->whereBetween("created_at", [$start, $end]);
};

$convs = Conversation::whereHas("messages", $filterMessages)
->with(["messages"  => $filterMessages]);
它是有效的。现在我需要添加一个条件:message.user\u id必须与他的对话的user\u id(whereHas和with)匹配。因此,我将回拨改为:

$filterMessages = function($query) use ($start, $end) {
    $query->whereBetween("created_at", [$start, $end]);
    $query->where("conversations.user_id", "author_id");
};
但它不起作用。我怎么能这么做

谢谢你试试这个

会话模型
定义关系

public function userMessages()
{
   return $this->hasMany(Message::class, 'author_id', 'user_id'); //your relationship based on data structure
}


我想你误解了我的问题,因为我说过我需要“message.user\u id必须与他的对话的user\u id匹配”。日期查询已经开始工作。感谢您可以定义与
对话的关系
查看我的最新帖子这是个好主意,但是userMessages关系忽略了对话id字段,因此它还会返回其他对话消息:(
message.user\u id==conversation.user\u id
message.author\u id==conversation.user\u id
可以指定吗?这样我就可以更新帖子的
author\u id
$convs = Conversation::whereHas('userMessages',function($query) use ($start, $end) {
                           $query->whereBetween("created_at", [$start, $end]);
                       })
                      ->with("userMessages")
                      ->get();