我有三个表,table1
,table2
和table3
。 table1
与table2
是一对多,table2
与table3
是一对多。
我想调用Table1::find($id)::delete()
并删除table2
和table3
中的所有行。
我在表格中添加了以下内容:
表1
public function delete()
{
$this->table2()->delete();
return parent::delete();
}
表2
public function delete()
{
$this->table3()->delete();
return parent::delete();
}
但是,table3
中的行不会被删除。如果我从模型Table3
手动调用删除功能,table2
的行将被删除。我编写代码的方式不应该在delete()
调用table2
时调用来自table1
的{{1}}函数吗?
答案 0 :(得分:3)
您无法在集合上调用delete(),也无法在查询构建器上加载远远相关的集合,以删除相关模型,因此您需要的是:
// Table1 model
public function delete()
{
$this->table2->each(function ($model2) {
$model2->table3()->delete();
});
$this->table2()->delete();
return parent::delete();
}
答案 1 :(得分:0)
我认为这会依次删除所有相关的内容:
// Table1
public function delete()
{
$this->table2()->delete();
$this->table2()->table3()->delete();
return parent::delete();
}
答案 2 :(得分:0)
我从laracasts中发现了这一点,并发现对我有用。 让我在这里粘贴答案: 所以我有两个模型-User和Property User.php
public function properties()
{
return $this->hasMany('App\Models\Property');
}
Property.php
public function user()
{
return $this->belongsTo('App\User');
}
因此,如果我要删除特定用户,当然,我也不想将其任何属性保留在数据库中:
public function destroy($id)
{
$user = User::findOrFail($id);
$user->properties()->delete();
$user->delete();
return [
'message' => 'Delete Complete!'
];
}
希望您或其他任何人都觉得有用!问候:)
来源:https://laracasts.com/discuss/channels/eloquent/laravel-delete-model-with-all-relations