在Laravels Eloquent / Fluent中,有没有办法删除行和通过关系连接到它的所有内容?

时间:2013-04-03 18:59:10

标签: mysql laravel fluent eloquent laravel-3

基本上,删除某些东西并让它自动搜索并删除与其连接的所有行和字段,而不是必须手动完成所有,这将是非常好的

例如,使用预先加载,我可以像这样急切加载:

Page::with(array(
    'elements',
    'elements.drafts',
    'elements.content',
    'elements.content.drafts'
))->where('myField', '=', $value)->first();

有没有办法为删除操作做类似的事情?类似的东西:

Page::with(array(
    'elements',
    'elements.drafts',
    'elements.content',
    'elements.content.drafts'
))->where('myField', '=', $value)->delete();

当然,我已经尝试了上面的代码,但它没有用。我提供它来帮助传达我正在寻找的东西。

1 个答案:

答案 0 :(得分:1)

经过一番搜索,我能够弄明白!我远远不是一个SQL专家,所以我甚至不知道要搜索“CASCADE”删除,这就是用SQL术语调用它。

无论如何,我发现了更多信息another StackOverflow post

我最终不得不在所有关系中设置删除功能。

对于has_many关系

对于has_many关系,我必须使用the code from the other StackOverflow post。具体来说,就像这样:

// This code is in my elements model, which has_many content
public function delete()
{
    foreach($this->content as $content)
    {
        $content->delete();
    }

    return parent::delete();
}

对于has_one关系

但是,我想指出,如果您正在处理 has_one 关系,则必须更改代码,使其看起来像下面的内容。

// This is inside my content model, which has_one draft
public function delete()
{
    // delete the single draft
    $this->drafts()->delete();

    return parent::delete();
}