Я пытаюсь сделать каскадную мягким удаляет работу перекрывая delete()
функции каждой модели, которую я думаю, должен каскад вниз от Project
до Version
к Link
, но проблема в том, что Безразлично» Кажется, что это вообще получается. Идея заключалась бы в том, что удаление проекта также приведет к удалению всех версий, которые удалили бы все ссылки и очистили их кешированные версии, но использование $this->versions()->delete();
, похоже, фактически не вызывает метод delete()
в модели Version
.Каскадные мягкое удаляет с Laravel-не работает, как ожидалось
Любые идеи о том, как получить эту работу, как я ожидаю?
class Project extends Eloquent {
protected $softDelete = true;
public function versions()
{
return $this->hasMany('Version');
}
public function delete()
{
$this->versions()->delete();
return parent::delete();
}
}
class Version extends Eloquent {
protected $softDelete = true;
public function project()
{
return $this->belongsTo('Project', 'project_id');
}
public function links()
{
return $this->hasMany('Link');
}
public function delete()
{
$this->links()->delete();
return parent::delete();
}
}
class Link extends Eloquent {
protected $softDelete = true;
public function version()
{
return $this->belongsTo('Version', 'version_id');
}
public function delete()
{
Cache::forget($this->id);
return parent::delete();
}
}
К сожалению, это, кажется, не работает, а на самом деле, кажется, ведут себя как переопределенном функции удаления. Когда я вызываю удаление из проекта, версии удаляются, но он никогда не попадает на ссылки, и, насколько я могу судить, он даже не входит в метод 'static :: deleting' версий. Любые идеи, почему это было бы? – Samsquanch
Похоже, я не единственный с этой проблемой: http://laravel.io/forum/03-26-2014-delete-relationschild-relations-without-cascade – Samsquanch
Ах, я плохой да, вам нужно будет используйте запрос для удаления коллекции отношений. Обновлен мой ответ. –