Laravel 2个带数据透视表的模型,多对多关系

Laravel 2个带数据透视表的模型,多对多关系,laravel,many-to-many,pivot,Laravel,Many To Many,Pivot,我正在尝试创建一个博客,我有两个模型,Post和Tag。我想用一个数据透视表来连接它们。这是一种多对多的关系,我不知道如何将帖子和标签链接在一起。当我尝试这样做时,它不会在我的数据库中返回任何内容。帖子有标题和内容,而标签只有名称。 我已经读到我必须使用同步方法或附加分离,但我不知道在哪里做。它是在邮政路线上还是标签路线上?我已经在routes.php中包含了帖子和标签的路由,并使用以下方法对它们进行了分组: Route::resource('/tags', 'TagController');

我正在尝试创建一个博客,我有两个模型,Post和Tag。我想用一个数据透视表来连接它们。这是一种多对多的关系,我不知道如何将帖子和标签链接在一起。当我尝试这样做时,它不会在我的数据库中返回任何内容。帖子有标题和内容,而标签只有名称。 我已经读到我必须使用同步方法或附加分离,但我不知道在哪里做。它是在邮政路线上还是标签路线上?我已经在routes.php中包含了帖子和标签的路由,并使用以下方法对它们进行了分组:

Route::resource('/tags', 'TagController');

Route::resource('/posts', 'PostController');
以下是我目前掌握的情况:

我的帖子模型:

class Post extends Model{
protected $fillable = [
    'title', 'content'
];

protected $hidden = [
    'view_count'
];

public function tags()
{
    return $this->belongsToMany('App\Tag', 'post_tag');
}}
这是我的标签型号:

class Tag extends Model{
protected $fillable = [
    'name'
];

public function posts(){
    return $this->belongsToMany('App\Post', 'post_tag');
}}
这是我的post_标记透视表:

class CreatePostTagTable extends Migration{

public function up()
{
    Schema::create('post_tag', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('post_id')->unsigned()->nullable()->index();
        $table->foreign('post_id')->references('id')->on('posts');
        $table->integer('tag_id')->unsigned()->nullable()->index();
        $table->foreign('tag_id')->references('id')->on('tags');
        $table->timestamps();
    });
}

public function down()
{
    Schema::dropIfExists('post_tag');
}}

嘿,我在拉威尔也是新来的,我和你有同样的问题。在您的情况下,我认为最好的做法是将其附加到
PostController.php
中。让我为你分享代码,我希望它能有所帮助

后置控制器

公共函数存储(请求$Request){
//首先,我们需要创建包含标记id的变量
//$tags=[1,2,4];类似这样的内容
$tags=$request->input('tags');
//现在将数据存储在posts表中
$post=新员额;
$post->title=$request->input('title');
$post->content=$request->input('content');
$post->save();
//保存邮件后,我们需要附加它
$post->tags()->附加($tags);
}
编辑:添加示例视图


标签1
标签2
标签3
更多标签
使用函数,例如:

$post->tags()->sync($array_of_tags_ids)

代码看起来不错。当我想创建一篇文章时,我希望唯一的用户,也就是管理员,将他想要的任何标签与他的文章相关联。我应该用sync方法创建什么路由来连接带有标签的帖子,因为到目前为止,我的帖子和标签在创建时是存储的,但在post_标签中没有存储任何内容table@joelhinz我现在意识到我的积垢看起来不错,但我有一个无关的问题要问你。我可以编辑“洞”问题来询问如何在帖子的“创建”视图中实现标记复选框吗。我不认为您可以自动执行这些操作,但是使用docs:Thank you your time@JoelHinz:)将代码运行起来应该相当容易,是否需要仅将数字作为id?我不知道管理员会为他的帖子选择什么标签。有没有其他方法可以代替使用标记id创建数组?@livia你有什么想法?因为要设置关系,只需使用pivot表传递标记和post的id。当管理员创建或编辑新的post时,他可以为post分配一个或多个标记,任意标记。他还有权创建新标签。从逻辑上讲,如果我通过tag_id 1或3或其他什么,我不是在强迫他只在1或3之间进行选择吗?你能给我举一个使用sync()的例子吗?事情是这样的。当管理员创建或编辑一篇新文章时,他可以为文章指定一个或多个标签,无论他想要哪个标签。他还有权创建新标签。如果创建的标记自动同步不是更好吗?这样,他可以删除、创建新标记,并从列表中选择一个或多个标记。p、 我还没有在我的帖子创建视图中创建标签的下拉列表啊,我很高兴能帮助你:D