我正在使用Laravel-Doctrine。我在app/Models
中使用“注释样式”创建了映射(但没有getter和setter),现在想生成包含方法的实体。
但是运行php artisan doctrine:generate:entities
会为生成的实体保留相同的名称空间。
因此,它要么覆盖我的映射,要么(如果我更新config/doctrine.php
中的源路径)则在另一个文件夹中生成实体,但保留与映射中指定的名称空间相同的名称空间。这会导致在命名空间中重复声明。
如何更改生成实体的名称空间?当前的方法实际上是使用上的痛苦。
答案 0 :(得分:0)
我是这样入侵的:
// config/doctrine.php
'paths' => [
base_path('database/mappings')
],
使用database/mappings
中的注释样式创建基本映射实体,但不使用设置方法和获取方法。并且不要设置任何名称空间。如果您想扩展映射类,则需要使用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;