删除包含外键的字段,而不删除该字段包含LARAVEL的所有项目
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了删除包含外键的字段,而不删除该字段包含LARAVEL的所有项目相关的知识,希望对你有一定的参考价值。
在我的数据库中,我有包含外键的用户,然后当我想在我的Laravel应用程序中删除一个商店时,我可以这样做但是对于属性“delete('cascade)”,商店包含的所有项目都将被删除。
我想删除任何一个字段,但不删除与用户有关系的所有项目。
例如:在我的应用程序中,我可以创建用户,但每个用户都有一个商店,这是我的外键,现在......我可以在我的应用程序中删除商店,但是如果我删除了商店,那么用户也会被删除。
Schema::table('users', function(Blueprint $table){
$table->engine = 'InnoDB';
$table->unsignedInteger('store_id')->nullable()->after('direccion');
$table->foreign('store_id')->references('id')->on('stores')->onDelete('cascade');
});
在我的商店模型中:
public function user()
{
return $this->hasOne('AppUser');
}
在我的用户模型中
public function store()
{
return $this->belongsTo('AppStore');
}
对于我拥有的其他元素也是如此:例如:我可以创建票证,票证包含外键,例如:user_id和status_id。我认为Store元素会出现同样的问题,对吧?我需要帮助。
门票型号:
public function user()
{
return $this->belongsTo(User::class, 'usuario_id', 'id');
}
public function status()
{
return $this->belongsTo('AppStatus');
}
我想保留元素,在这种情况下,如果我想删除商店,我不想删除具有该外键的用户。在票证的情况下,我希望能够删除用户,但保持票证保存,反之亦然。
在我看来,错误在于你建立关系的方式。
因此,如果用户有一个商店,那么你应该在你的user_id
表中添加一个stores
,而不是相反。
那你的模型应该是这样的:
Store.php
public function user()
{
return $this->belongsTo(User::class);
}
和你的User.php
public function store()
{
return $this->hasOne(Store::class);
}
使用级联选项意味着无论何时从系统中删除用户,您都希望删除其存储。当商店被删除时,用户将没有商店,但用户仍然存在。
尝试交换关系
在你的User.php中
public function store()
{
return $this->hasOne('AppStore');
}
在你的Store.php中
public function user()
{
return $this->belongsTo('AppUser');
}
以上是关于删除包含外键的字段,而不删除该字段包含LARAVEL的所有项目的主要内容,如果未能解决你的问题,请参考以下文章
Django REST Framework - 发布包含自然键的外键字段?
sql server解决无法删除修改拥有外键约束的表或表的记录字段