2015-01-22 3 views
2

Условия таблице:Как удалить связанные данные один к одному отношения laravel?

  • term_id
  • имя
  • пробкового

Term_taxonomy стол:

  • term_taxonomy_id
  • term_id
  • описание

Моя Term Модель:

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

Моя 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

Я рекомендую вам использовать ограничение внешнего ключа с при удалении каскада – lukasgeiter

+0

то, как использовать его? с удовольствием встретимся с вами снова @lukasgeiter –

ответ

0

Я рекомендую вам использовать ограничение внешнего ключа, чтобы оно было удалено, и ссылки на записи также будут удалены.

С Laravels Schema Builder:

$table->foreign('term_id') 
     ->references('term_id')->on('terms') 
     ->onDelete('cascade'); 

Теперь каждый раз, когда вы удаляете Term все связанные TermTaxonomy будут удалены.

В случае, если вы не используете схемы Builder: MySQL reference

0

Я согласен, что лучше создавать внешние ключи, но если вы по какой-то причине не хотите, вы можете сделать небольшие изменения в вашей Термическая модель.

в конце класса добавить следующее:

public function delete(){ 
    $this->TermTaxonomy()->delete(); 
    return parent::delete(); 
} 

так Laravel удалит таксономию, когда вы будете называть Term::find($id)->delete();

0

Вы также можете попробовать Model Event.

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

Смежные вопросы