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

时间:2015-01-22 20:14:21

标签: php laravel-4 eloquent

条款表:

  • term_id
  • 名称
  • 蛞蝓

Term_taxonomy表:

  • term_taxonomy_id
  • term_id
  • 描述

我的期限模型:

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

My TermTaxonomy模型:

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

我想从TermsTerm_taxonomy表中删除相关数据,因为我到目前为止是这样做的:

$category = Term::with('TermTaxonomy')->find($id);
// delete related   
$category->TermTaxonomy()->delete();
$category->delete();

它有效,但有没有最好的方法来删除相关数据以及如何使用它?

3 个答案:

答案 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();

时,laravel会删除分类法

答案 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();

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