如何通过第三个表Laravel进行选择?

如何通过第三个表Laravel进行选择?,laravel,laravel-5.3,Laravel,Laravel 5.3,我有帖子表格 每个Post都有以下类别: Post_categories _________________ id post_id | category_id 此外,还有以下表格: User_categories __________________ category_id | user_id 因此,我需要从Post表中选择所有行,其中User\u categories.User\u id=9和User\u categories.category\u id=Post\u categorie

我有
帖子
表格

每个
Post
都有以下类别:

Post_categories
 _________________
id post_id | category_id
此外,还有以下表格:

User_categories
__________________
category_id | user_id
因此,我需要从
Post
表中选择所有行,其中
User\u categories.User\u id=9
User\u categories.category\u id=Post\u categories


所以,换句话说,我需要展示用户订阅的类别文章。

以雄辩的方式再次尝试

在Post模型类中,定义与类别模型的多对多关系。(数据透视表是Post_类别)

在用户模型类中,定义与类别模型的多对多关系。(透视表是User_categories)同样在这个类中,将posts()函数定义为对关系存在性的查询

class User {
public function categories()
{
return $this->belongsToMany('App\Category', 'User_categories', 'user_id', 'category_id');
}

public function posts()
{
return App\Post::whereHas('categories', function ($query) use($this) {
$query->whereIn('posts.cat_id', array_column($this->categories->toArray(), 'categories.id'));
});
}

}
获取用户订阅的帖子

App\User::find(9)->posts;

希望这能有所帮助。

我建议从阅读以下文档开始:

在这里:

特别是这一部分:

首先,您需要定义
Post
Category
User
的模型

在那之后,确保你有根据你的需求定义的正确的关系,但正如我从你的问题中理解的那样,你想要多对多的关系。 对于这种关系,您还需要创建透视表。按照惯例,您将它们命名为
category\u post
category\u user
(数据透视表中两个型号的小写名称,按字母顺序排列)

您的数据透视表迁移应该类似于,例如对于
category\u post

    public function up()
{
    Schema::create('category_post', function (Blueprint $table) {
        $table->integer('category_id')->unsigned()->index();
        $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
        $table->integer('post_id')->unsigned()->index();
        $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
        $table->primary(['skill_id', 'user_id']);
        $table->timestamps();
    });
}
设置表之后,您必须确保正确定义了关系

之后,您应该能够执行以下操作:


User::find(9)->posts

不幸的是,但是你没有正确地理解我的问题,请看下面的SQL:好吧,答案仍然有效,你只需要将它修改为
公告
而不是
发布
我们可以去聊天吗?你可以去聊天吗?当然可以。当你在附近的时候给我打电话。我在这里,让我们谈谈如何搬家吧?嗯。。我认为Stack Overflow中没有私人聊天功能
    public function up()
{
    Schema::create('category_post', function (Blueprint $table) {
        $table->integer('category_id')->unsigned()->index();
        $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
        $table->integer('post_id')->unsigned()->index();
        $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
        $table->primary(['skill_id', 'user_id']);
        $table->timestamps();
    });
}