如何用外键删除数据?

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_categoryFilm_actor table 中的记录,然后才能从 Film [=22] 中删除您的记录=].

而是做类似的事情:

(假设您已经从 Film_categoryFilm_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');
  
}