我与用户和角色之间有一个多对多的关系,并带有一个role_user表。我的迁移设置如下(简化):
users
table:
public function up()
{
Schema::create('users', function(Blueprint $table)
{
$table->increments('id');
$table->string('email')->unique();
});
}
roles
table:
public function up()
{
Schema::create('roles', function(Blueprint $table)
{
$table->increments('id');
$table->string('name');
});
}
role_user
table:
public function up()
{
Schema::create('role_user', function(Blueprint $table)
{
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->integer('role_id')->unsigned();
$table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
});
}
因此,根据文档,我将我的外键设置为unsigned。
现在,我添加了几个用户,并附加了一些角色-
一切正常。但是,当我删除一个用户(User::destroy(2)
)时,该用户在role_user
表中的行不会被删除,这导致了多余的行。
我究竟做错了什么?
编辑:抓取模型并应用->delete();
也具有相同的效果。
尝试创建此表时尝试设置。此修复程序对我有用。
$table->engine = 'InnoDB';
我已经在以下位置提交了错误:https :
//github.com/laravel/framework/issues/8730
根据文档和本文,我只需要在@orm\joincolumn中指定ondelete=“cascade”,它应该生成一个在delete时级联的外键。是我干的.. 然而,当我进行迁移时,它生成的FK不会在删除时级联。 我也尝试删除部分,但没有效果。 编辑:我也试过在反面设置它,但它也不起作用(事实上,当我这样做时,根本就没有外键):
我试图收集一些关于以下方法的信息,以便在删除父实体时自动删除子实体。似乎最常见的方法是使用这三个注释中的一个:或或。 我对第三个有点困惑:,因为在教义官方文件中关于这个问题的解释非常少),我希望有人能证实我从网上的研究和经验中收集和了解的以下信息... 它是做什么的? ==>当拥有方实体为。即使您与其他拥有方实体处于中。 应在集合上使用(因此在或关系中使用) ORM中的实现 ==>当拥有方实体是且
我有单向相关实体: 以及以下测试: 如果不是从测试中调用此代码,则效果很好,但在测试中,我得到了一个例外,即建议没有被书籍删除。 此外,我尝试从为Hibernate查询记录的sql中获取任何信息,但我看不到此测试的任何语句。 我不想对实体使用双向链接,只想了解如何解决这个具体问题或以某种方式调试它。
我正在使用用户密钥作为用户表中的主键 它总是显示这样的错误
我有一个用户表,ID列作为主键。我有这个功能在控制器: 此函数不回显任何内容。如果我从$id更改为$name,如下所示: