条款表:
Term_taxonomy表:
我的期限模型:
public function TermTaxonomy(){
return $this->hasOne('TermTaxonomy');
}
My TermTaxonomy模型:
public function Term(){
return $this->belongsTo('Term');
}
我想从Terms
和Term_taxonomy
表中删除相关数据,因为我到目前为止是这样做的:
$category = Term::with('TermTaxonomy')->find($id);
// delete related
$category->TermTaxonomy()->delete();
$category->delete();
它有效,但有没有最好的方法来删除相关数据以及如何使用它?
答案 0 :(得分:0)
我建议您使用外键约束使其删除,引用记录也将被删除。
使用Laravels Schema Builder:
$table->foreign('term_id')
->references('term_id')->on('terms')
->onDelete('cascade');
现在每次删除Term
时,所有相关的TermTaxonomy
都将被删除。
如果您不使用架构构建器:MySQL reference
答案 1 :(得分:0)
我同意更好的方法是创建外键,但如果您出于某种原因不想这样做,则可以对Term模型进行一些小改动。
在课程结束时添加:
public function delete(){
$this->TermTaxonomy()->delete();
return parent::delete();
}
所以当您致电Term::find($id)->delete();
答案 2 :(得分:0)
您还可以尝试模型事件。
class Term extends Eloquent {
public static function boot()
{
parent::boot();
// Setup event bindings...
static::deleting(function($term)
{
//delete related
if($term->TermTaxonomy()->delete()){
return true;
}
return false;
});
}
}
在boot
模型
Term
功能
删除Term
时,请先录制删除方法。
如果删除方法返回true
而不是删除记录,否则不删除。
$category = Term::with('TermTaxonomy')->find($id);
$category->delete();