2017-01-28 1 views
0

В то время как команда my bin/cake bake all работает, и я печатаю все возможные имена моделей на основе моей базы данных, чтобы испечь, мои миграции не работают. Это ошибка, которую я получаю.Невозможно обработать семя миграции торта (не удалось вывести тип базы данных)

bin/cake migrations seed 

Welcome to CakePHP v3.3.12 Console 
--------------------------------------------------------------- 
App : src 
Path: /Users/myhostcomputer/workspace/myapp/src/ 
PHP : 7.1.0 
--------------------------------------------------------------- 
Exception: Could not infer database type from driver in [/Users/myhostcomputer/workspace/myapp/vendor/cakephp/migrations/src/ConfigurationTrait.php, line 151] 
2017-01-28 12:47:48 Error: [InvalidArgumentException] Could not infer database type from driver 
Stack Trace: 
#0 /Users/myhostcomputer/workspace/myapp/vendor/cakephp/migrations/src/ConfigurationTrait.php(83): Migrations\Command\Seed->getAdapterName('mysql') 
#1 /Users/myhostcomputer/workspace/myapp/vendor/robmorgan/phinx/src/Phinx/Console/Command/AbstractCommand.php(91): Migrations\Command\Seed->getConfig() 
#2 /Users/myhostcomputer/workspace/myapp/vendor/cakephp/migrations/src/ConfigurationTrait.php(206): Phinx\Console\Command\AbstractCommand->bootstrap(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) 
#3 /Users/myhostcomputer/workspace/myapp/vendor/cakephp/migrations/src/Command/Seed.php(69): Migrations\Command\Seed->bootstrap(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) 
#4 /Users/myhostcomputer/workspace/myapp/vendor/symfony/console/Command/Command.php(262): Migrations\Command\Seed->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) 
#5 /Users/myhostcomputer/workspace/myapp/vendor/symfony/console/Application.php(826): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) 
#6 /Users/myhostcomputer/workspace/myapp/vendor/symfony/console/Application.php(189): Symfony\Component\Console\Application->doRunCommand(Object(Migrations\Command\Seed), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) 
#7 /Users/myhostcomputer/workspace/myapp/vendor/symfony/console/Application.php(120): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) 
#8 /Users/myhostcomputer/workspace/myapp/vendor/cakephp/migrations/src/Shell/MigrationsShell.php(101): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) 
#9 [internal function]: Migrations\Shell\MigrationsShell->main('migrations', 'seed') 
#10 /Users/myhostcomputer/workspace/myapp/vendor/cakephp/cakephp/src/Console/Shell.php(472): call_user_func_array(Array, Array) 
#11 /Users/myhostcomputer/workspace/myapp/vendor/cakephp/migrations/src/Shell/MigrationsShell.php(156): Cake\Console\Shell->runCommand(Array, true, Array) 
#12 /Users/myhostcomputer/workspace/myapp/vendor/cakephp/cakephp/src/Console/ShellDispatcher.php(227): Migrations\Shell\MigrationsShell->runCommand(Array, true, Array) 
#13 /Users/myhostcomputer/workspace/myapp/vendor/cakephp/cakephp/src/Console/ShellDispatcher.php(182): Cake\Console\ShellDispatcher->_dispatch(Array) 
#14 /Users/myhostcomputer/workspace/myapp/vendor/cakephp/cakephp/src/Console/ShellDispatcher.php(128): Cake\Console\ShellDispatcher->dispatch(Array) 
#15 /Users/myhostcomputer/workspace/myapp/bin/cake.php(34): Cake\Console\ShellDispatcher::run(Array) 
#16 {main} 

Это моя конфигурация DataSource из app.php

'Datasources' => [ 
     'default' => [ 
      'className' => 'Cake\Database\Connection', 
      'driver' => 'mysql', 
      'persistent' => false, 
      'host' => 'localhost', 
      'port' => '/Applications/MAMP/tmp/mysql/mysql.sock', 
      'username' => 'XXXXXXXX', 
      'password' => 'XXXXXXXXXXXXXXXX', 
      'database' => 'XXXXXXXX', 
      'encoding' => 'utf8', 
      'timezone' => 'UTC', 
      'flags' => [], 
      'cacheMetadata' => true, 
      'log' => false, 
      'quoteIdentifiers' => false, 
      //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'], 

      'url' => env('DATABASE_URL', null), 
     ], 

Может быть, это что-то делать с этим я работаю на Mac OS и я использую MAMP

ответ

1

mysql является не является допустимым значением driver, это, скорее всего, не сработает для файловых систем, чувствительных к регистру, так как это переведёт в файл с именем mysql.php.

Правильный короткий имя_класс будет Mysql, с заглавной буквой M, однако плагин миграции не поддерживает короткие имена классов (как можно видеть в the source where the exception is being thrown), он ожидает, что либо (полностью) квалифицированные имена классов, или сконструированные экземпляры класса драйвера ,

Так, короче говоря:

'driver' => \Cake\Database\Driver\Mysql::class 
+0

Defining :: класс не было необходимости, но да, теперь работает ... Спасибо! –

+0

Использование константы [magic 'class'] (http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.class.class) должно быть обязательно (если только вы не будете определите имя класса как строку, конечно), удаление его должно привести к фатальной ошибке, так как код попытается получить доступ к несуществующей константе с именами. @Valor_ – ndm

+0

Это странно, потому что он не работает с :: классом и работает без :: класса ... каким бы то ни было образом работает так thx –

Смежные вопросы