如何通过第三个表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();
});
}