gpt4 book ai didi

Laravel 删除belongsToMany 关系中的所有belongsToMany 关系

转载 作者:行者123 更新时间:2023-12-03 15:06:44 26 4
gpt4 key购买 nike

我有一个 Tournament 模型,其中包含与 Session 模型的belongsToMany 关系:

class Tournament extends Model{

public function sessions(){
return $this->belongsToMany(Session::class, 'tournament_has_sessions');
}
}

然后我的 session 模型包含与用户模型的belongsToMany 关系:
class Session extends Model{

public function users(){
return $this->belongsToMany(User::class, 'session_has_users');
}

}

现在,当我删除锦标赛时,我想用它删除 session_has_users 表中的所有 session 和所有信息。

我试过了:
$tournament->sessions()->with('users')->delete(); -- < This
$tournament->sessions()->delete();
$tournament->users()->detach();
$tournament->delete();

但它不起作用。 session_has_users 表中的数据持久化

我意识到我可以做这样的事情:
DB::table('session_has_users')->whereIn('session_id', $this->sessions()->pluck('id'))->delete();

但是有没有更有效/更方便(或者即使不是更有效的替代方法)来实现这一目标?

最佳答案

对外键使用 RDBMS 引用操作

在数据库模式中,您应该使用 ON DELETE CASCADE 定义外键。行动。这将在删除引用的 id 时自动删除相关记录。

(有关 Laravel 迁移文件中的示例行,请参阅 dbudimir 的回答)

使用 Eloquent 分离所有相关模型

如果您不使用外键或您的数据库缺乏对引用操作的支持,您可以使用:

$tourament->sessions()->sync([]);

The sync method accepts an array of IDs to place on the intermediate table. Any IDs that are not in the given array will be removed from the intermediate table. So, after this operation is complete, only the IDs in the given array will exist in the intermediate table:



https://laravel.com/docs/5.5/eloquent-relationships#updating-many-to-many-relationships

提供一个空数组应该删除所有关系。

关于Laravel 删除belongsToMany 关系中的所有belongsToMany 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47659484/

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