{"id":389,"date":"2021-09-30T00:57:28","date_gmt":"2021-09-30T03:57:28","guid":{"rendered":"http:\/\/hackerzone.com.br\/blog\/?p=389"},"modified":"2022-08-13T00:19:34","modified_gmt":"2022-08-13T03:19:34","slug":"laminas-framework-com-doctrine-migration-error","status":"publish","type":"post","link":"http:\/\/hackerzone.com.br\/blog\/laminas-framework-com-doctrine-migration-error\/","title":{"rendered":"Laminas Framework com Doctrine Migration &#8211; Error"},"content":{"rendered":"<p>Voltei a trabalhar com Zend + Doctrine + Migration, por\u00e9m tive alguns problemas ao realizar a instala\u00e7\u00e3o.<br \/>\nVou interpretar que voc\u00ea j\u00e1 passou pelos seguintes passos:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\ncomposer create-project -s dev laminas\/laminas-mvc-skeleton path\/to\/install\r\ncomposer require doctrine\/doctrine-orm-module\r\ncomposer require doctrine\/doctrine-migrations\r\n<\/pre>\n<p>Depois de tentar executar o comando:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nvendor\\bin\\doctrine-module migrations:generate\r\n<\/pre>\n<p>Me deparei com o seguinte erro:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nPHP Warning:  assert(): assert(is_string($namespace)) failed in C:\\xampp\\htdocs\\migration\\vendor\\doctrine\\migrations\\lib\\Doctrine\\Migrations\\Tools\\Console\\Command\\GenerateCommand.php on line 65\r\n\r\nWarning: assert(): assert(is_string($namespace)) failed in C:\\xampp\\htdocs\\migration\\vendor\\doctrine\\migrations\\lib\\Doctrine\\Migrations\\Tools\\Console\\Command\\GenerateCommand.php on line 65\r\nPHP Fatal error:  Uncaught TypeError: Argument 1 passed to Doctrine\\Migrations\\Generator\\ClassNameGenerator::generateClassName() must be of the type string, null given, called in C:\\xampp\\htdocs\\migration\\vendor\\doctrine\\migrations\\lib\\Doctrine\\Migrations\\Tools\\Console\\Command\\GenerateCommand.php on line 67 and defined in C:\\xampp\\htdocs\\migration\\vendor\\doctrine\\migrations\\lib\\Doctrine\\Migrations\\Generator\\ClassNameGenerator.php:14\r\nStack trace:\r\n#0 C:\\xampp\\htdocs\\migration\\vendor\\doctrine\\migrations\\lib\\Doctrine\\Migrations\\Tools\\Console\\Command\\GenerateCommand.php(67): Doctrine\\Migrations\\Generator\\ClassNameGenerator-&gt;generateClassName(NULL)\r\n#1 C:\\xampp\\htdocs\\migration\\vendor\\symfony\\console\\Command\\Command.php(299): Doctrine\\Migrations\\Tools\\Console\\Command\\GenerateCommand-&gt;execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))\r\n#2 C:\\xampp\\htdocs\\migration\\vendor\\symfony\\console\\Application.php(978): Symfony\\Component\\Console\\Command\\Command-&gt;run(Object(Symfony\\Com in C:\\xampp\\htdocs\\migration\\vendor\\doctrine\\migrations\\lib\\Doctrine\\Migrations\\Generator\\ClassNameGenerator.php on line 14\r\n\r\nFatal error: Uncaught TypeError: Argument 1 passed to Doctrine\\Migrations\\Generator\\ClassNameGenerator::generateClassName() must be of the type string, null given, called in C:\\xampp\\htdocs\\migration\\vendor\\doctrine\\migrations\\lib\\Doctrine\\Migrations\\Tools\\Console\\Command\\GenerateCommand.php on line 67 and defined in C:\\xampp\\htdocs\\migration\\vendor\\doctrine\\migrations\\lib\\Doctrine\\Migrations\\Generator\\ClassNameGenerator.php:14\r\nStack trace:\r\n#0 C:\\xampp\\htdocs\\migration\\vendor\\doctrine\\migrations\\lib\\Doctrine\\Migrations\\Tools\\Console\\Command\\GenerateCommand.php(67): Doctrine\\Migrations\\Generator\\ClassNameGenerator-&gt;generateClassName(NULL)\r\n#1 C:\\xampp\\htdocs\\migration\\vendor\\symfony\\console\\Command\\Command.php(299): Doctrine\\Migrations\\Tools\\Console\\Command\\GenerateCommand-&gt;execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))\r\n#2 C:\\xampp\\htdocs\\migration\\vendor\\symfony\\console\\Application.php(978): Symfony\\Component\\Console\\Command\\Command-&gt;run(Object(Symfony\\Com in C:\\xampp\\htdocs\\migration\\vendor\\doctrine\\migrations\\lib\\Doctrine\\Migrations\\Generator\\ClassNameGenerator.php on line 14\r\n<\/pre>\n<p>Minhas configura\u00e7\u00f5es:<\/p>\n<ul>\n<li>&#8211; PHP 7.4.13<\/li>\n<li>&#8211; Apache\/2.4.46<\/li>\n<li>&#8211; MariaDB (10.4.17-MariaDB)<\/li>\n<li>&#8211; Tudo isso rodando no velho e bom xampp (Windows 10)<\/li>\n<\/ul>\n<p>Meus pacotes no composer.json:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n&quot;require&quot;: {\r\n        &quot;php&quot;: &quot;^7.3 || ~8.0.0&quot;,\r\n        &quot;laminas\/laminas-component-installer&quot;: &quot;^2.4&quot;,\r\n        &quot;laminas\/laminas-development-mode&quot;: &quot;^3.2&quot;,\r\n        &quot;laminas\/laminas-skeleton-installer&quot;: &quot;^0.3&quot;,\r\n        &quot;laminas\/laminas-mvc&quot;: &quot;^3.1.1&quot;,\r\n        &quot;laminas\/laminas-cache&quot;: &quot;^2.11.1&quot;,\r\n        &quot;laminas\/laminas-mvc-form&quot;: &quot;^1.1.0&quot;,\r\n        &quot;laminas\/laminas-json&quot;: &quot;^3.2&quot;,\r\n        &quot;laminas\/laminas-cli&quot;: &quot;^1.1.1&quot;,\r\n        &quot;laminas\/laminas-mvc-plugins&quot;: &quot;^1.1.0&quot;,\r\n        &quot;laminas\/laminas-mvc-middleware&quot;: &quot;^2.0.0&quot;,\r\n        &quot;laminas\/laminas-session&quot;: &quot;^2.10.0&quot;,\r\n        &quot;laminas\/laminas-di&quot;: &quot;^3.2.2&quot;,\r\n        &quot;doctrine\/doctrine-orm-module&quot;: &quot;^4.0&quot;,\r\n        &quot;doctrine\/migrations&quot;: &quot;^3.2&quot;       \r\n    },\r\n<\/pre>\n<p>Me deparei com esse erro no m\u00ednimo esquisito ao tentar executar o generate do doctrine migrations, pois at\u00e9 ent\u00e3o havia trabalhado com ele no passado e n\u00e3o necessitava nada mais para rodar com sucesso, pois bem, para solucionar fiz in\u00fameras pesquisas e pouco encontrei, mas consegui encontrar a solu\u00e7\u00e3o e vou disponibilizar aqui.<\/p>\n<p>Em alguns f\u00f3runs at\u00e9 visualizei algumas pessoas falando a respeito do zend-code ou laminas-code que n\u00e3o estaria sendo carregado por n\u00e3o reconhecer o namespace (por conta da mudan\u00e7a dos pacotes de zend para laminas), mas n\u00e3o constatei ver\u00eddico.<\/p>\n<p>Foi ent\u00e3o que embarquei nas pesquisas para ver o que mudou, depois de dar uma varrida na documenta\u00e7\u00e3o encontrei a solu\u00e7\u00e3o, faltava especificar as configura\u00e7\u00f5es do migrations (Aparentemente agora \u00e9 obrigat\u00f3rio).<\/p>\n<p>Acesse seu arquivo de configura\u00e7\u00e3o de conex\u00e3o com o banco, no meu caso como exemplo:<br \/>\n<strong>config\/autoload\/local.php<\/strong><\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n&lt;?php\r\n\r\n\r\nreturn array(\r\n    'doctrine' =&gt; array(\r\n        'connection' =&gt; array(\r\n            \/\/ default connection name\r\n            'orm_default' =&gt; array(\r\n                'driverClass' =&gt; Doctrine\\DBAL\\Driver\\PDOMySql\\Driver::class,\r\n                'params' =&gt; array(\r\n                    'host'     =&gt; '127.0.0.1',\r\n                    'port'     =&gt; '3306',\r\n                    'user'     =&gt; 'root',\r\n                    'password' =&gt; '',\r\n                    'dbname'   =&gt; 'migration',\r\n                    'driverOptions' =&gt; array(\r\n                        PDO::MYSQL_ATTR_INIT_COMMAND=&gt;&quot;SET NAMES 'UTF8'&quot;,\r\n                    ),\r\n                ),\r\n            ),\r\n        ),\r\n\r\n        \/\/ ******** ADICIONE ESSAS CONFIGURA\u00c7\u00d5ES ********\r\n\r\n        'migrations_configuration' =&gt; [\r\n            'orm_default' =&gt; [\r\n                'table_storage' =&gt; [\r\n                    'table_name' =&gt; 'DoctrineMigrationVersions',\r\n                    'version_column_name' =&gt; 'version',\r\n                    'version_column_length' =&gt; 1024,\r\n                    'executed_at_column_name' =&gt; 'executedAt',\r\n                    'execution_time_column_name' =&gt; 'executionTime',\r\n                ],\r\n                \/\/ ABAIXO VOC\u00ca PODE IR INSERINDO SEUS M\u00d3DULOS\r\n                'migrations_paths' =&gt; [\r\n                    'Application'=&gt; 'data\/DoctrineORMModule\/Migrations'\r\n                ], \/\/ an array of namespace =&gt; path\r\n                'migrations' =&gt; [], \/\/ an array of fully qualified migrations\r\n                'all_or_nothing' =&gt; false,\r\n                'check_database_platform' =&gt; true,\r\n                'organize_migrations' =&gt; 'year_and_month', \/\/ year or year_and_month\r\n                'custom_template' =&gt; null,\r\n            ],\r\n            'orm_other' =&gt; [\r\n                \r\n            ]\r\n        ],\r\n    ),\r\n);\r\n<\/pre>\n<p>Caso o diret\u00f3rio &#8220;data\/DoctrineORMModule\/Migrations&#8221; n\u00e3o exista, ent\u00e3o crie ele.<\/p>\n<p>Depois de inserir as configura\u00e7\u00f5es basta tentar executar o comando novamente:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nvendor\\bin\\doctrine-module migrations:generate\r\n<\/pre>\n<p>A reposta deve ser:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nGenerated new migration class to &quot;data\/DoctrineORMModule\/Migrations\\2021&#92;&#48;9\/Version20210930023441.php&quot;\r\n\r\n To run just this migration for testing purposes, you can use migrations:execute --up 'Application\\Version20210930023441'\r\n\r\n To revert the migration you can use migrations:execute --down 'Application\\Version20210930023441'\r\n<\/pre>\n<p><strong>Fontes:<\/strong><br \/>\n<a href=\"https:\/\/www.doctrine-project.org\/projects\/doctrine-orm-module\/en\/4.0.x\/migrations.html\">https:\/\/www.doctrine-project.org\/projects\/doctrine-orm-module\/en\/4.0.x\/migrations.html<\/a><br \/>\n<a href=\"https:\/\/www.doctrine-project.org\/projects\/doctrine-migrations\/en\/3.2\/reference\/configuration.html\">https:\/\/www.doctrine-project.org\/projects\/doctrine-migrations\/en\/3.2\/reference\/configuration.html<\/a><br \/>\n<a href=\"https:\/\/stackoverflow.com\/questions\/21499253\/doctrine-migrations-not-using-specified-configuration\">https:\/\/stackoverflow.com\/questions\/21499253\/doctrine-migrations-not-using-specified-configuration<\/a><br \/>\n<a href=\"https:\/\/olegkrivtsov.github.io\/using-zend-framework-3-book\/html\/en\/Database_Migrations\/Configuring_Migrations.html\">https:\/\/olegkrivtsov.github.io\/using-zend-framework-3-book\/html\/en\/Database_Migrations\/Configuring_Migrations.html<\/a><br \/>\n<a href=\"https:\/\/stackoverflow.com\/questions\/66508800\/how-can-i-configure-doctrine-with-migrations\">https:\/\/stackoverflow.com\/questions\/66508800\/how-can-i-configure-doctrine-with-migrations<\/a><\/p>\n<p><strong>Links \u00dateis:<\/strong><br \/>\n<a href=\"https:\/\/github.com\/doctrine\/DoctrineORMModule\">https:\/\/github.com\/doctrine\/DoctrineORMModule<\/a><br \/>\n<a href=\"https:\/\/www.doctrine-project.org\/projects\/doctrine-migrations\/en\/3.2\/reference\/configuration.html\">https:\/\/www.doctrine-project.org\/projects\/doctrine-migrations\/en\/3.2\/reference\/configuration.html<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voltei a trabalhar com Zend + Doctrine + Migration, por\u00e9m tive alguns problemas ao realizar a instala\u00e7\u00e3o. Vou interpretar que voc\u00ea j\u00e1 passou pelos seguintes passos: Depois de tentar executar o comando: Me deparei com o seguinte erro: Minhas configura\u00e7\u00f5es: &#8211; PHP 7.4.13 &#8211; Apache\/2.4.46 &#8211; MariaDB (10.4.17-MariaDB) &#8211; Tudo isso rodando no velho e [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":459,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[165,14,176,12,101,127,13],"tags":[16,178,177],"class_list":["post-389","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-apache","category-doctrine","category-migrations","category-php","category-windows","category-xampp","category-zend-framework-3","tag-doctrine","tag-doctrine-migrations","tag-laminas","cat-165-id","cat-14-id","cat-176-id","cat-12-id","cat-101-id","cat-127-id","cat-13-id","has_thumb"],"_links":{"self":[{"href":"http:\/\/hackerzone.com.br\/blog\/wp-json\/wp\/v2\/posts\/389","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/hackerzone.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/hackerzone.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/hackerzone.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/hackerzone.com.br\/blog\/wp-json\/wp\/v2\/comments?post=389"}],"version-history":[{"count":3,"href":"http:\/\/hackerzone.com.br\/blog\/wp-json\/wp\/v2\/posts\/389\/revisions"}],"predecessor-version":[{"id":393,"href":"http:\/\/hackerzone.com.br\/blog\/wp-json\/wp\/v2\/posts\/389\/revisions\/393"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/hackerzone.com.br\/blog\/wp-json\/wp\/v2\/media\/459"}],"wp:attachment":[{"href":"http:\/\/hackerzone.com.br\/blog\/wp-json\/wp\/v2\/media?parent=389"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/hackerzone.com.br\/blog\/wp-json\/wp\/v2\/categories?post=389"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/hackerzone.com.br\/blog\/wp-json\/wp\/v2\/tags?post=389"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}