在我的数据库中,我的用户包含外键,然后当我想在Laravel App中删除商店时,可以这样做,但是对于属性“ 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('App\User');
}
在我的用户模型中
public function store()
{
return $this->belongsTo('App\Store');
}
对于其他元素,我也有同样的看法,例如: 我可以创建一个票证,该票证包含外键,例如:user_id和status_id。我认为这将是与Store元素相同的问题,对吗?我需要帮助。
机票型号:
public function user()
{
return $this->belongsTo(User::class, 'usuario_id', 'id');
}
public function status()
{
return $this->belongsTo('App\Status');
}
我想保留这些元素,在这种情况下,如果要删除商店,则不想删除具有该外键的User。对于票证,我希望能够删除用户,但保留票证,反之亦然。
答案 0 :(得分:4)
我认为错误在于您建立关系的方式。
因此,如果用户有一个商店,则应在source_description
表中添加一个user_id
,而不是相反。
那么您的模型应该是这样的:
stores
Store.php
和您的public function user()
{
return $this->belongsTo(User::class);
}
User.php
这与您的级联选项一起意味着,每当从系统中删除用户时,您都希望删除其存储。删除商店后,用户将没有商店,但该用户仍然存在。
答案 1 :(得分:0)
尝试交换关系
在您的User.php中
public function store()
{
return $this->hasOne('App\Store');
}
在您的Store.php中
public function user()
{
return $this->belongsTo('App\User');
}