具有多个关系的Laravel查询

具有多个关系的Laravel查询,laravel,laravel-4,eloquent,Laravel,Laravel 4,Eloquent,我是拉雷维尔的新手,所以请原谅我可能提出的noobish问题。此外,我也调查了所有其他“类似”的问题,但要么它们没有重现正确的解决方案,要么我真的很难理解 情景: 我有一个帖子模型和一个主题模型。这就是他们现在的样子 在Post.php中 public function subjects() { return $this->belongsToMany('Subject', 'posts_subjects'); } 在Subject.php中 public function pos

我是拉雷维尔的新手,所以请原谅我可能提出的noobish问题。此外,我也调查了所有其他“类似”的问题,但要么它们没有重现正确的解决方案,要么我真的很难理解

情景:

我有一个帖子模型和一个主题模型。这就是他们现在的样子

在Post.php中

public function subjects() {
    return $this->belongsToMany('Subject', 'posts_subjects');
}
在Subject.php中

public function posts() {
    return $this->belongsToMany('Post', 'posts_subjects');
}
现在,我需要实现的是:

如果将查询参数传递给请求(即q=Food),我只想返回在主题关系中包含主题食物的帖子,而不返回其他帖子。如果什么都没有通过,那么我只是展示一切

这就是我的PostsController的索引操作看起来的样子

public function index() {

    $q = Input::get('q');

    $posts = Post::all();

    return View::make('posts.index', ['posts' => $posts]);
}
我该怎么做呢?非常感谢您的帮助。 非常感谢


顺便说一句,我可以用这段代码获得所有帖子。

这是未经测试的代码,但如果你的查询只返回一个主题,它可能会对你有用:

public function index() 
{

    if($q = Input::get('q'))
    {
            if($subject = Subject::with('posts')->where('name', $q)->first())
            {
                $posts = $subject->posts;
            }
            else
            {
                $posts = array();
            }
    }
    else
    {
        $posts = Post::all();
    }


    return View::make('posts.index', ['posts' => $posts]);
}

我想你可能对这段关系的运作有点困惑。单个帖子是否可以包含多个主题(单个帖子是否可以与食物和旅行相关联)?使用透视表的多对多关系意味着在关系的两侧使用
belongstomy()
。是的,对不起。这两款车我都有。。我只是稍微改变了一些想法,认为我可能做错了什么,但问题仍然存在。。我可以从主题模型中获取给定主题的帖子,但是因为我们谈论的是PostsController,所以将整个返回值建立在不同的模型上感觉很奇怪..谢谢你,伙计。这就做到了:)