我正在使用laravel-doctrine。我在app/Models
中使用"注释样式"创建了映射(但没有Getters和Setter(,现在想生成包括方法在内的实体。
但是运行php artisan doctrine:generate:entities
为生成的实体保留相同的命名空间。
因此,它覆盖我的映射,或者(如果我更新config/doctrine.php
中的源路径(,它将在其他文件夹中生成实体,但保留与映射中指定的相同命名空间。这导致命名空间中的重复声明。
如何更改生成实体的命名空间?当前的方式实际上是一种用法疼痛。
我以这种方式入侵:
// config/doctrine.php
'paths' => [
base_path('database/mappings')
],
在database/mappings
中创建具有注释样式的基本映射实体,但没有设定器和Getters。并且不要设置任何名称空间。如果您想扩展映射类,则需要使用require_once()
导入。
然后运行:
php artisan doctrine:generate:entities --generate-annotations --generate-methods --regenerate-entities
这将在app/Entities
中生成完整实体。运行自定义清理脚本后,将命名空间声明插入生成的实体。
php -f database/mapping-tools/clear-entity-namespace.php
文件:clear-entity-namespace.php
<?php
$targetDir = 'app/Entities';
$files = scandir($targetDir);
array_shift($files); // remove .
array_shift($files); // remove ..
foreach ($files as $file) {
echo '> File: ' . $file . PHP_EOL;
$path = $targetDir . '/' . $file;
$content = file_get_contents($path);
$newHeader = '<?php ' . PHP_EOL . PHP_EOL . 'namespace Entities;';
$content = str_replace('<?php', $newHeader, $content);
file_put_contents($path, $content);
}
echo '>>> Cleanup complete' . PHP_EOL;