gpt4 book ai didi

mysql - Laravel 5 数据透视表只保存第一条记录

转载 作者:行者123 更新时间:2023-11-29 06:26:01 24 4
gpt4 key购买 nike

我有一个表,它只包含其他两个表的 ID,我想要一个 n:m 关系,但现在每次我保存一条记录时,如果两个 ID 之一已被使用,它会删除前一个记录。

我的迁移:

    Schema::create('show_user', function(Blueprint $table) {
$table->integer('show_id')->unsigned()->index();
$table->foreign('show_id')->references('id')->on('shows');
$table->integer('user_id')->unsigned()->index();
$table->foreign('user_id')->references('id')->on('users');
});

我的模型:

用户

public function shows()
{
return $this->belongsToMany('App\Show');
}

演出

public function users()
{
return $this->belongsToMany('App\User');
}

这就是我保存到数据透视表的方式:

User::find($userid)->shows()->sync([$showid, $userid])

当我为用户 1(我)执行此操作时,在节目 5 中,它会保存 1 和 5,当我在节目 12 中再次尝试为同一用户执行此操作时,它会保存 1 和 12 并删除之前的 1 和 5 记录.如果我通过 phpMyAdmin 手动插入,我可以添加多条记录,但不能使用同步。我也试过这个,结果相同:

User::find($userid)->shows()->sync([$showid])

最佳答案

您没有正确使用 sync()sync() 用于从User 添加和删除 Shows,需要一个数组显示 ids。因此,如果您调用 sync([1,5]),您会将 ids 为 1 和 5 的 Shows 添加到 User 并删除之前与该 User 关联的所有其他 Show

您可以阅读有关 inserting related-models in Laravel here 的信息, 但你可能只需要知道这三个例子:

如果 UserShows 3、4 和 8 有关系,并且您想确保 User 仅与 显示 4 和 5 你会这样做:

User::find($userid)->shows()->sync([4,5]); // Removes 3 and 8; Adds 5

如果 User 已经与 Show 4 建立了关系,而你想添加 Show 5,你可以这样做:

User::find($userid)->shows()->attach(5); // Adds 5

如果 UserShows 3、4、5 和 8 有关系,并且您想删除 3 和 8,您可以这样做:

User::find($userid)->shows()->detach([3,8]); // Removes 3 and 8

在每个示例之后,User 将只与 Shows 4 和 5 有关系。

关于mysql - Laravel 5 数据透视表只保存第一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30957559/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com