Laravel 我需要编写雄辩的查询,返回具有特定标记的消息

Laravel 我需要编写雄辩的查询,返回具有特定标记的消息,laravel,eloquent,many-to-many,where-clause,Laravel,Eloquent,Many To Many,Where Clause,到目前为止,我已编写此查询以获取所有消息,但我无法返回 其中tag_id=1的消息 我在函数($q){$q->where('tag_id',1)}中使用了where子句。但是它不起作用。你必须在班上名列前茅 你必须在班上名列第一 尝试使用whereHas(),假设您正确设置了多对多关系: $tagId = 1; $return = DB::table('message_tag') ->join('messages', 'messages.id', '=', 'me

到目前为止,我已编写此查询以获取所有消息,但我无法返回 其中tag_id=1的消息

我在函数($q){$q->where('tag_id',1)}中使用了where子句。但是它不起作用。

你必须在班上名列前茅 你必须在班上名列第一 尝试使用
whereHas()
,假设您正确设置了多对多关系:

$tagId = 1; 
$return = DB::table('message_tag')
            ->join('messages', 'messages.id', '=', 'message_tag.message_id')
            ->join('tags', 'tags.id', '=', 'message_tag.tag_id')
            ->where("message_tag.tag_id", "=", $tagId)
            ->select('messages.text', 'tags.text')
            ->get();
尝试使用
whereHas()
,假设您正确设置了多对多关系:

$tagId = 1; 
$return = DB::table('message_tag')
            ->join('messages', 'messages.id', '=', 'message_tag.message_id')
            ->join('tags', 'tags.id', '=', 'message_tag.tag_id')
            ->where("message_tag.tag_id", "=", $tagId)
            ->select('messages.text', 'tags.text')
            ->get();

如果您能看到我的努力并在其中添加一些评论,我将不胜感激。与sql风格的联接相比,我更喜欢使用雄辩的模型进行查询。如果您能看到我的工作并在其中添加一些注释,我将不胜感激。与sql风格的联接相比,我更喜欢使用雄辩的模型进行查询。
$tagId = 1; 
$return = DB::table('message_tag')
            ->join('messages', 'messages.id', '=', 'message_tag.message_id')
            ->join('tags', 'tags.id', '=', 'message_tag.tag_id')
            ->where("message_tag.tag_id", "=", $tagId)
            ->select('messages.text', 'tags.text')
            ->get();
$tag = 'Madhab452';
$messages = Message::whereHas('tags', function ($query) use ($tag) {
    $query->where('name', '=', $tag)
    ->select('name', 'tag_id');
})->get();