如何用外键删除数据?
How to delete data with foreign key?
我需要一些帮助才能从我的数据库中删除一部电影。
我知道因为我有 数据透视表 我会遇到一些使用 外键 的麻烦(我的删除控制器给出了这个错误),但是我不知道怎么解决。
我得到的错误如下:
SQLSTATE[23000]:违反完整性约束:1451 无法删除或更新父行:外键约束失败(sakila
.film_category
,CONSTRAINT fk_film_category_film
外键 (film_id
) 引用 film
(film_id
) 更新级联) (SQL: 从 film
中删除 film_id
= 999 )
My database tables
这是我的模型:
model Film:
class film extends Model{
protected $table = "film";
protected $primaryKey = 'film_id';
public $timestamps = false;
use HasFactory;
protected $sql=['film_id', 'title', 'length'];
public function category(){
return $this->belongsToMany(category::class,'film_category', 'film_id', 'category_id');
}
public function actor(){
return $this->belongsToMany(actor::class,'film_actor', 'film_id', 'actor_id');
}
}
model Category:
class category extends Model{
protected $table = "category";
protected $primaryKey = 'category_id';
public $timestamps = false;
use HasFactory;
protected $sql=['category_id','name'];
public function film(){
return $this->belongsToMany(film::class,'film_category', 'category_id', 'film_id');
}
}
model Actor:
class actor extends Model{
protected $primaryKey = 'actor_id';
public $timestamps = false;
use HasFactory;
protected $sql=['actor_id', 'first_name', 'last_name'];
public function film(){
return $this->belongsToMany(film::class,'film_actor', 'actor_id', 'film_id');
}
}
现在我需要一些帮助来使我的控制器具有删除记录的功能。
public function remove($film_id){
$film=film::findOrFail($film_id);
$film->delete();
return redirect('/film/view');
谢谢
要删除电影,您必须先删除 Film_category
和 Film_actor
table 中的记录,然后才能从 Film
[=22] 中删除您的记录=].
而是做类似的事情:
(假设您已经从 Film_category
和 Film_actor
table 中创建了模型)
public function remove($film_id){
$film_category = FilmCategory::where('film_id', $film_id)->delete();
$film_actor = FilmActor::where('film_id', $film_id)->delete();
$film = film::findOrFail($film_id);
$film->delete();
return redirect('/film/view');
}
我需要一些帮助才能从我的数据库中删除一部电影。
我知道因为我有 数据透视表 我会遇到一些使用 外键 的麻烦(我的删除控制器给出了这个错误),但是我不知道怎么解决。
我得到的错误如下:
SQLSTATE[23000]:违反完整性约束:1451 无法删除或更新父行:外键约束失败(sakila
.film_category
,CONSTRAINT fk_film_category_film
外键 (film_id
) 引用 film
(film_id
) 更新级联) (SQL: 从 film
中删除 film_id
= 999 )
My database tables
这是我的模型:
model Film:
class film extends Model{
protected $table = "film";
protected $primaryKey = 'film_id';
public $timestamps = false;
use HasFactory;
protected $sql=['film_id', 'title', 'length'];
public function category(){
return $this->belongsToMany(category::class,'film_category', 'film_id', 'category_id');
}
public function actor(){
return $this->belongsToMany(actor::class,'film_actor', 'film_id', 'actor_id');
}
}
model Category:
class category extends Model{
protected $table = "category";
protected $primaryKey = 'category_id';
public $timestamps = false;
use HasFactory;
protected $sql=['category_id','name'];
public function film(){
return $this->belongsToMany(film::class,'film_category', 'category_id', 'film_id');
}
}
model Actor:
class actor extends Model{
protected $primaryKey = 'actor_id';
public $timestamps = false;
use HasFactory;
protected $sql=['actor_id', 'first_name', 'last_name'];
public function film(){
return $this->belongsToMany(film::class,'film_actor', 'actor_id', 'film_id');
}
}
现在我需要一些帮助来使我的控制器具有删除记录的功能。
public function remove($film_id){
$film=film::findOrFail($film_id);
$film->delete();
return redirect('/film/view');
谢谢
要删除电影,您必须先删除 Film_category
和 Film_actor
table 中的记录,然后才能从 Film
[=22] 中删除您的记录=].
而是做类似的事情:
(假设您已经从 Film_category
和 Film_actor
table 中创建了模型)
public function remove($film_id){
$film_category = FilmCategory::where('film_id', $film_id)->delete();
$film_actor = FilmActor::where('film_id', $film_id)->delete();
$film = film::findOrFail($film_id);
$film->delete();
return redirect('/film/view');
}