我有三个表,table1
、table2
和table3
<代码>表1是一对多对表2
,表2
是一对多对表3
。
我想调用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
中的行没有被删除。如果我从模型table2
中手动调用删除函数,Table3中的行将被删除。按照我编写代码的方式,当table1
调用table2
函数时,不应该调用它吗?
您不能对集合调用delete(),也不能在查询生成器上加载远相关集合来删除相关模型,因此您需要的是:
// Table1 model
public function delete()
{
$this->table2->each(function ($model2) {
$model2->table3()->delete();
});
$this->table2()->delete();
return parent::delete();
}
我认为这将按顺序删除所有相关的:
// Table1
public function delete()
{
$this->table2()->delete();
$this->table2()->table3()->delete();
return parent::delete();
}
我从laracasts那里找到了这个,发现它对我很有用。让我把答案贴在这里:我有两个模型——用户和属性用户。php
public function properties()
{
return $this->hasMany('App\Models\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