====== 13 laravel-admin ====== ===== Database用意 ===== APP_URL=http://hoge.hogehoge.com DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=XXXXXXX DB_USERNAME=XXXXXXX DB_PASSWORD=XXXXXXX ===== インストール ===== ※[[11_php:02_framework:01_laravel:12_laravel |laravel new]]の後で実行 composer require encore/laravel-admin php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider" php artisan admin:install ===== エラー1. ===== $ php artisan admin:install Migrating: 2014_10_12_000000_create_users_table Illuminate\Database\QueryException : SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'users' already exists (SQL: create table `users` (`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 utf8 collate 'utf8_unicode_ci') at /var/www/vhost/portal.kumolabo.com/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| Exception trace: 1 Doctrine\DBAL\Driver\PDOException::("SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'users' already exists") /var/www/vhost/portal.kumolabo.com/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php:119 2 PDOException::("SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'users' already exists") /var/www/vhost/portal.kumolabo.com/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php:117 Please use the argument -v to see more details. ==== 条件 ==== Laravel5.4以上 MySQL5.7.7未満 ==== 原因 ==== MySQL5.7.7以前のバージョンでは、PRIMARY_KEYおよびUNIQUE_KEYを付けたカラムには最大767bytesまでしか入らない。 ==== 対策 ==== === 1.MySQLのバージョンを5.7.7以上にアップグレード === 5.7.7以上にすれば、PRIMARY_KEYおよびUNIQUE_KEYを付けたカラムに767bytes以上のデータが入る。 === 2.charasetをutf8mb4から変更 === laravel側のcharsetをUTF-8に変える。 laravel5.3までは、charsetの標準設定はUTF-8だった。 $ cat config/database.php | grep utf8mb4 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', ↓ $ cat config/database.php | grep utf8mb4 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', === 3.カラムの最大長を変更し、767bytes以上の文字列が入らないようにする === varchar(191) のカラムを作成すれば、191 * 4 = 764bytesのため、エラーが発生しない。 use Illuminate\Support\Facades\Schema; public function boot() { Schema::defaultStringLength(191); } ===== エラー2. ===== Disk [admin] not configured, please add a disk config in `config/filesystems.php`. ==== 対応方法 ==== config/filesystems.phpに下記を追加する。 'disks' => [ ... , 'admin' => [ 'driver' => 'local', 'root' => public_path('uploads'), 'visibility' => 'public', 'url' => env('APP_URL').'/uploads', ], ], {{tag>php laravel Laravel-admin}}