【问题标题】:Laravel: Filter query based on many-to-many relationshipLaravel:基于多对多关系过滤查询
【发布时间】:2013-09-14 17:29:38
【问题描述】:

我有两个对象,例如 PostTag 具有多对多关系。

基于标签集合,我想选择与 (1) 任何标签或 (2) 集合中的所有标签匹配的所有帖子。

有没有一种简单的方法可以在 Laravel 中执行这些查询(最好使用 Eloquent)?

【问题讨论】:

    标签: laravel laravel-4 relationship eloquent


    【解决方案1】:

    你查询你想要的标签,然后你可以遍历每个标签帖子​​p>

    $tags = Tag::where('name','=','Laravel 4')->get();
    foreach($tags as $tag)
    {
        foreach($tag->posts as $post)
        {
            echo $post->name;
        }
    }
    

    这是假设您的关系和数据透视表设置正确。

    您还可以根据某些帖子急切加载某些标签...

    $posts = Post::where('name','=','Some post name') ->with(array('tags' => function($query) { $query = $query->where('tag_name','=','Laravel'); }))->get();

    foreach($posts as $post)
    {
        foreach($post->tags as $tag)
        {
            echo $tag->tag_name;
        }
    }
    

    【讨论】:

    • 谢谢!但最后我想要一个可以排序的帖子集合。您的解决方案只给了我一个按标签排序的帖子名称(或对象)列表。另外:我不太明白您答案的第二部分与我的问题有何关联。你能补充一点解释吗?
    • 当使用我的第二个示例时,它会查找名称为“Some post name”的所有帖子,然后对于每个帖子,它会找到 tag_name 为“Laravel”的标签。这可能正是您所需要的,因为您也可以使用 $query = $query->sortBy('name'); 对它们进行排序
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 2021-02-24
    • 2018-11-02
    • 2015-05-29
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    相关资源
    最近更新 更多