Laravel 关系过滤器,其中具有Elount的回调
鉴于以下模型 对话:id,用户id 消息:id,对话id,作者id,创建于 我想查询所有在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
$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();