如何删除相关数据的一对一关系laravel?

How to delete related data one to one relationships laravel?

条款table:

Term_taxonomy table:

我的学期模型:

public function TermTaxonomy(){
    return $this->hasOne('TermTaxonomy');
}

我的 TermTaxonomy 模型:

public function Term(){
    return $this->belongsTo('Term');
}

我想从 TermsTerm_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();

http://laravel.com/docs/4.2/eloquent#model-events