tkmiumのブログ

tkmium-note

プログラミング中に気づいたことや日々の記録を書いていきます。情報関係基礎の解説記事等も作成します。

【Laravel】php artisan migrateでSQLSTATE[42S01]になる時

MAMPとLeravelでPHPの勉強をしているのですが、php artisan migrateをした時にSQLSTATE[42S01]エラーにはまったので備忘録をかねて記事にします。

環境

  • macOS Mojave 10.14.2
  • MAMP 5.2
  • Laravel 5.7.19

 

状況

$php artisan migrate

を実行した時に以下のようなエラーがでる。

$ php artisan migrate
Migrating: 2018_12_19_081821_create_customers_table

   Illuminate\Database\QueryException  : SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'customers' already exists (SQL: create table `customers` (`id` int unsigned not null auto_increment primary key, `name` varchar(255) not null, `email` varchar(255) not null, `email_verified_at` timestamp null, `password` varchar(255) not null, `remember_token` varchar(100) null, `created_at` timestamp null, `updated_at` timestamp null) default character set utf8mb4 collate 'utf8mb4_unicode_ci')

  at /Applications/MAMP/htdocs/auth/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664
    660|         // If an exception occurs when attempting to run a query, we'll format the error
    661|         // message to include the bindings with SQL, which will make this exception a
    662|         // lot more helpful to the developer instead of just the database's errors.
    663|         catch (Exception $e) {
  > 664|             throw new QueryException(
    665|                 $query, $this->prepareBindings($bindings), $e
    666|             );
    667|         }
    668| 

 

解決法

  1. .envファイルの変更
  2. database.phpの変更

 

.envファイルの変更

htdocs > [プロジェクトファイル]直下の.envファイルを編集します。

これを

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

このように変更します。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=[データベース名]
DB_USERNAME=root
DB_PASSWORD=root

 

database.phpの変更

htdocs > [プロジェクトファイル名] > config

 

これを

    'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
        ],

 

このように変更します。

        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', '/Applications/MAMP/tmp/mysql/mysql.sock'),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
        ],

unix_socketに/Applications/MAMP/tmp/mysql/mysql.sockを追加します。

 


 

もう一度$php artisan migrateを実行したら、うまくいきました^^