在我的数据库中,我有包含外国密钥的用户,然后当我想在我的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 and status_id。我认为这将是与商店元素相同的问题,对吗?我需要帮助。
票务型号:
public function user()
{
return $this->belongsTo(User::class, 'usuario_id', 'id');
}
public function status()
{
return $this->belongsTo('AppStatus');
}
我想保留元素,在这种情况下,如果我想删除商店,我不想删除具有外键的用户。而且,如果有门票,我希望能够删除用户,但请保存票,反之亦然。
在我看来,错误在于您建立关系的方式。
因此,如果用户有一个商店,则应在stores
表中添加user_id
,而不是相反。
那么您的模型应该是这样:
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');
}