如何删除相关数据的一对一关系laravel?
How to delete related data one to one relationships laravel?
条款table:
- term_id
- 名字
- 鼻涕虫
Term_taxonomy table:
- term_taxonomy_id
- term_id
- 描述
我的学期模型:
public function TermTaxonomy(){
return $this->hasOne('TermTaxonomy');
}
我的 TermTaxonomy 模型:
public function Term(){
return $this->belongsTo('Term');
}
我想从 Terms
和 Term_taxonomy
Table 中删除相关数据,我目前所做的是:
$category = Term::with('TermTaxonomy')->find($id);
// delete related
$category->TermTaxonomy()->delete();
$category->delete();
可以用,但是有没有什么好的删除相关数据的方法和使用方法呢?
我建议你使用外键约束使它如此删除,引用记录也会被删除。
使用 Laravels Schema Builder:
$table->foreign('term_id')
->references('term_id')->on('terms')
->onDelete('cascade');
现在每删除一个Term
,所有相关的TermTaxonomy
都会被删除。
如果您不使用架构生成器:MySQL reference
我同意创建外键更好,但如果您出于某种原因不想这样做,您可以对您的 Term 模型做一些小改动。
在 class 末尾添加:
public function delete(){
$this->TermTaxonomy()->delete();
return parent::delete();
}
所以 laravel 将在您调用 Term::find($id)->delete();
时删除分类法
您也可以尝试模型事件。
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;
});
}
}
在Term
模型中添加boot
功能
删除Term
记录时先调用删除方法。
如果删除方法是 return true
比删除记录否则不删除。
$category = Term::with('TermTaxonomy')->find($id);
$category->delete();
条款table:
- term_id
- 名字
- 鼻涕虫
Term_taxonomy table:
- term_taxonomy_id
- term_id
- 描述
我的学期模型:
public function TermTaxonomy(){
return $this->hasOne('TermTaxonomy');
}
我的 TermTaxonomy 模型:
public function Term(){
return $this->belongsTo('Term');
}
我想从 Terms
和 Term_taxonomy
Table 中删除相关数据,我目前所做的是:
$category = Term::with('TermTaxonomy')->find($id);
// delete related
$category->TermTaxonomy()->delete();
$category->delete();
可以用,但是有没有什么好的删除相关数据的方法和使用方法呢?
我建议你使用外键约束使它如此删除,引用记录也会被删除。
使用 Laravels Schema Builder:
$table->foreign('term_id')
->references('term_id')->on('terms')
->onDelete('cascade');
现在每删除一个Term
,所有相关的TermTaxonomy
都会被删除。
如果您不使用架构生成器:MySQL reference
我同意创建外键更好,但如果您出于某种原因不想这样做,您可以对您的 Term 模型做一些小改动。
在 class 末尾添加:
public function delete(){
$this->TermTaxonomy()->delete();
return parent::delete();
}
所以 laravel 将在您调用 Term::find($id)->delete();
您也可以尝试模型事件。
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;
});
}
}
在Term
模型中添加boot
功能
删除Term
记录时先调用删除方法。
如果删除方法是 return true
比删除记录否则不删除。
$category = Term::with('TermTaxonomy')->find($id);
$category->delete();