Измените свой код для этого:
public function up()
{
Schema::create('gateway_transactions', function (Blueprint $table) {
$table->engine = "innoDB";
$table->unsignedBigInteger('id', true);
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('CASCADE');
$table->enum('provider', \Parsisolution\Gateway\GatewayManager::availableDrivers());
$table->decimal('amount', 15, 2);
$table->integer('order_id')->nullable();
$table->string('currency', 3)->nullable();
$table->string('ref_id', 100)->nullable();
$table->string('tracking_code', 50)->nullable();
$table->string('card_number', 50)->nullable();
$table->enum('status', \Parsisolution\Gateway\Transaction::availableStates())
->default(\Parsisolution\Gateway\Transaction::STATE_INIT);
$table->string('ip', 20)->nullable();
$table->json('extra')->nullable();
$table->timestamp('paid_at')->nullable();
$table->nullableTimestamps();
$table->softDeletes();
});
}
Я ДУМАЮ - В следующем разделе я понимаю, как работает Laravel.
Поскольку вы создаете свою таблицу в первой схеме, вы должны поместить свой внешний ключ в создание.
Проблема в том, что Laravel Migration проверит, что все будет работать, прежде чем применять код, но этап - это функция up (). Так что все в нем находится на той же стадии. Миграция думает, что ваши gateway_transactions не существуют, и в данный момент не проверяют, все ли в порядке. Это будет, когда код будет существовать.