steveb's avatar

Super Weird Laravel Migration Deadlock Problem

Hi, I can migrate all of my tables up and down with no issues. But- once I create a record in the database via my application, PHP artisan migrate just hangs and nothing happens. If I click into Sequel Pro and try to refresh the view of a table it says:

"MySQL said: Deadlock found when trying to get lock; try restarting transaction"

The tables have no foreign keys so there's no logical reason I can find for this to happen. I've tried running the migrations with --verbose but because the table is deadlocked, nothing happens at all on the artisan command side.

These are the migrations for the tables but I can't imagine what in here could affect this:

Schema::create('addresses', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('user_id');
            $table->string('name');
            $table->string('address');
            $table->string('address2')->nullable();
            $table->string('city');
            $table->string('state');
            $table->string('zip');
            $table->unsignedBigInteger('country_id');

            $table->softDeletes();
            $table->timestamps();
        });
Schema::create('orders', function (Blueprint $table) {
            $table->id();
            $table->string('order_id');
            $table->decimal('total', 15, 2);
            $table->decimal('subtotal', 15, 2);
            $table->decimal('tax', 15, 2);

            $table->unsignedBigInteger('vendor_id');
            $table->unsignedBigInteger('user_id');
            $table->unsignedInteger('billing_address_id')->nullable();
            $table->unsignedInteger('shipping_address_id')->nullable();

            $table->string('company_name')->nullable();
            $table->string('tax_nr')->nullable();
            $table->string('notes')->nullable();
            $table->string('stripe_charge_id')->nullable();

            $table->enum('status', [ 'created', 'pending', 'delivered']);
            $table->enum('payment_status', [ 'paid', 'unpaid'])->nullable();

            $table->softDeletes();
            $table->timestamps();

        });
Schema::create('order_items', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('order_id');
            $table->unsignedBigInteger('product_id');
            $table->decimal('tax', 15, 2);
            $table->decimal('price', 15, 2);

            $table->decimal('subtotal', 15, 2);
            $table->decimal('total', 15, 2);

            $table->unsignedInteger('qty');
            $table->string('name');
            $table->string('sku');
            $table->timestamps();

            $table->softDeletes();

        });

Anyone have any idea? This is stumping me! Thanks in advance!

0 likes
3 replies
bobbybouwmann's avatar

A deadlock only happens if something is still using the table from another place. So make sure no connections are established for the database.

It might even work to just throw away the database at all or even create a new one with another name and try to migrate on that.

1 like
Snapey's avatar

when you add data to the database, do other artisan functions also hang?

This would indicate something in a service provider. Perhaps you have a circular reference by using with inside two eloquent models, both referring to the other?

1 like
steveb's avatar
steveb
OP
Best Answer
Level 2

Oddly enough, this ended up being an issue with Sequel Pro on a Mac. Worst program ever. Every time I clicked into the program to verify data was in the database, it would deadlock it. Super weird. Thanks all!

Please or to participate in this conversation.