Laravel : How to delete child relationship Laravel


Pernahkan teman-teman mengalami kasus data child yang terkait pada suatu relasi tidak ikut terhapus saat data induknya dihapus ?.

Berikut ini beberapa solusi yang bisa teman-teman coba.


Laravel Relationships
SOLUTIONS

Berikut ini adalah beberapa solusi yang mungkin bisa membantu kamu.


Untuk mengatasi problem tersebut, kita bisa melakukan konfigurasi migration dengan onDelete cascade pada bagian foreign key. Contohnya seperti berikut ini.

public function up()
{
    Schema::create('posts', function (Blueprint $table) {
        $table->id();
        $table->foreignId('category_id')->references('id')->on('categories')->cascadeOnDelete();
        $table->timestamps();
    });
}

Terima Kasih

Jika teman-teman sudah terlanjur melewatkan pada migration untuk konfigurasi onDelete cascade, maka kita juga bisa melakukan delete child data di dalam controller. Berikut ini contohnya.

public function destroy($id)
{
    //find category
    $category = Category::find($id);

    // delete all associated posts
    $category->posts()->delete();

    //...
}

Di atas, pastikan teman-teman memiliki nama method di dalam model untuk relasi many. Untuk contoh di atas nama method saya adalah posts.

Atau teman-teman juga bisa menggunakan kode seperti berikut ini.

public function destroy($id)
{
    //find category
    $category = Category::find($id);

    // delete all associated posts
    foreach($category->posts()->get() as $post) {

        //delete post
        $post->delete()
    }

    //...
}

Terima Kasih

KEBIJAKAN KOMENTAR

Saat memberikan komenatar silahkan memberikan informasi lengkap tentang error, seperti: screenshot, link kode, dll. Baca aturan komentar kami