Skip to content
Advertisement

laravel 8 migration error: Unknown column ‘batch’ in ‘order clause’ (SQL: select `migration` from `migrations` order by `batch` asc, `migration` asc)

[SOLVED]

i new to Laravel and PHP.

i tried to migrate my own migrations but i can’t.

this my laravel and php information:

my php info

  • PHP 8.0.3 (cli) (built: Mar 4 2021 05:33:14) ( NTS )
  • Composer version 2.0.11 2021-02-24
  • Laravel 8.x

mysql

  • Server version: 10.5.9-MariaDB Arch Linux

my OS info

  • uname: Linux ali 5.4.105-1-MANJARO #1 SMP PREEMPT 2021 x86_64 GNU/Linux

when i run command ./artisan migrate or php artisan migrate Laravel throws this error:

   IlluminateDatabaseQueryException 

  SQLSTATE[42S22]: Column not found: 1054 Unknown column 'batch' in 'order clause' (SQL: select `migration` from `migrations` order by `batch` asc, `migration` asc)

  at vendor/laravel/framework/src/Illuminate/Database/Connection.php:687
    683▕         // If an exception occurs when attempting to run a query, we'll format the error
    684▕         // message to include the bindings with SQL, which will make this exception a
    685▕         // lot more helpful to the developer instead of just the database's errors.
    686▕         catch (Exception $e) {
  ➜ 687▕             throw new QueryException(
    688▕                 $query,
    689▕                 $this->prepareBindings($bindings),
    690▕                 $e
    691▕             );

  • A column was not found: You might have forgotten to run your migrations. You can run your migrations using `php artisan migrate`. 
    https://laravel.com/docs/master/migrations#running-migrations

      +28 vendor frames 
  29  artisan:37
      IlluminateFoundationConsoleKernel::handle()

it’s always happens on my system regardless of my migration files. it means that if i migrate my app when i haven’t even one migration file, this error will appear.

for example i create a project with this steps:

composer create-project laravel/laravel mig "8.x"

this problem tested on 8.x, 7.x, 6.x versions.

cd mig

change my .env file and set below variables :

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME="my database"
DB_PASSWORD="my pasword"

this my .env file :

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:J2//xlOZPYFlkzQwWmuwbILklCmPnTV6beXFED48K4I=
APP_DEBUG=true
APP_URL=http://localhost

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME="my database"
DB_PASSWORD="my pasword"

BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1

MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

if i write incorrect password or my database and username i will get this error :

   IlluminateDatabaseQueryException 

  SQLSTATE[HY000] [1045] Access denied for user 'database'@'localhost' (using password: NO) (SQL: select * from information_schema.tables where table_schema = laravel and table_name = migrations and table_type = 'BASE TABLE')

  at vendor/laravel/framework/src/Illuminate/Database/Connection.php:671
    667|         // If an exception occurs when attempting to run a query, we'll format the error
    668|         // message to include the bindings with SQL, which will make this exception a
    669|         // lot more helpful to the developer instead of just the database's errors.
    670|         catch (Exception $e) {
  > 671|             throw new QueryException(
    672|                 $query, $this->prepareBindings($bindings), $e
    673|             );
    674|         }
    675| 

      +33 vendor frames 
  34  artisan:37
      IlluminateFoundationConsoleKernel::handle()

but when i write correct database info always Laravel throws this error:

   IlluminateDatabaseQueryException 

  SQLSTATE[42S22]: Column not found: 1054 Unknown column 'batch' in 'order clause' (SQL: select `migration` from `migrations` order by `batch` asc, `migration` asc)

  at vendor/laravel/framework/src/Illuminate/Database/Connection.php:671
    667|         // If an exception occurs when attempting to run a query, we'll format the error
    668|         // message to include the bindings with SQL, which will make this exception a
    669|         // lot more helpful to the developer instead of just the database's errors.
    670|         catch (Exception $e) {
  > 671|             throw new QueryException(
    672|                 $query, $this->prepareBindings($bindings), $e
    673|             );
    674|         }
    675| 

  • A column was not found: You might have forgotten to run your migrations. You can run your migrations using `php artisan migrate`. 
    https://laravel.com/docs/master/migrations#running-migrations

      +27 vendor frames 
  28  artisan:37
      IlluminateFoundationConsoleKernel::handle()

this error and problem is just for migrations system. in my app Query Builder and Eloquent Laravel works well.

in my error it say that :

• A column was not found: You might have forgotten to run your migrations. You can run your migrations using `php artisan migrate`.

but it’s not work, why ?

SOLUTION

this my mysql tables :

+-------------------+
| Tables_in_laravel |
+-------------------+
| migrations        |
+-------------------+

the migrations table already exists in my database, but it’s a custom migration table. actually this table created by another frameworks … https://github.com/alirezaarzehgar/my-exercise-php-framework.git

i use signal@localhost mysql user in many web app and this action made a conflict.

this my solution :

first of all you should delete all tables on your current mysql user. in this case i just have migrations table :

mysql -u username -p'password' databse -e "DROP TABLE migrations"

if you want see all of your migrations you can run this command:

mysql -u username -p'password' databse -e "SHOW TABLES"

and then you can delete all of this tables.

then you can run your migrations. ./artisan migrate

Advertisement

Answer

Delete the old migration table then re-run artisan migrate and see what happenes

User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement