Good content takes time and effort to come up with.

Please consider supporting us by just disabling your AD BLOCKER and reloading this page again.







SQLite Doesn't Support Dropping Foreign Keys in Laravel


05th September 2021 1 min read
Share On     Share On WhatsApp     Share On LinkedIn


Many times when you are working on SQLite database with Laravel you might have come across a wired error that SQLite doesn't support dropping foreign keys.


The reason is SQLite database has no concept called foreign keys. Let's fix this issue in Laravel.


Install Doctrine DBAL Package


To fix the DBAL issues make sure to install the following package.


composer require doctrine/dbal

Check if SQLite Driver is being Used


Before


Example 1

public function down()
{
    Schema::table('comments', function (Blueprint $table) {
        $table->dropForeign(['parent_id']);

        $table->dropColumn(['parent_id']);
    });
}


After (Driver conditional check)


Example 1

public function down()
{
    Schema::table('comments', function (Blueprint $table) {
        /** Make sure to put this condition to check if driver is SQLite */
        if (DB::getDriverName() !== 'sqlite') {
            $table->dropForeign(['parent_id']);
        }

        $table->dropColumn(['parent_id']);
    });
}


You can put this condition for multiple columns too.


Example 2

public function down()
{
    Schema::table('payments', function (Blueprint $table) {
        if (DB::getDriverName() !== 'sqlite') {
            $table->dropForeign(['coupon_id']);
            $table->dropForeign(['currency_id']);
        }


        $table->dropColumn(['status', 'currency_id', 'coupon_id', 'notes', 'invoice_number']);
    });
}


I hope this might have solved your issues. Happy coding.




Author Image
AUTHOR

Channaveer Hakari

I am a full-stack developer working at WifiDabba India Pvt Ltd. I started this blog so that I can share my knowledge and enhance my skills with constant learning.

Never stop learning. If you stop learning, you stop growing