0

基本的に、何かを削除して、それに接続されているすべての行とフィールドを自動的に検索して削除するのは、手動ですべてを行うのではなく、非常に便利です。

たとえば、熱心な読み込みを使用すると、次のように熱心に読み込むことができます。

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();

もちろん、上記のコードを試しましたが、うまくいきませんでした。私が探しているものを伝えるのに役立つように提供しています。

4

1 に答える 1

1

もう少し調べてみたらわかりました!私は SQL の専門家ではないので、SQL 用語で「CASCADE」削除を検索することさえ知りませんでした。

いずれにせよ、別の StackOverflow 投稿で詳細情報を見つけました。

結局、すべての関係で削除機能を設定する必要がありました。

has_many 関係の場合

has_many リレーションシップについては、他の StackOverflow 投稿のコードを使用する必要がありました。具体的には、次のようになります。

// 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();
}
于 2013-04-03T19:29:51.127 に答える