doctrine动态创建实体

时间:2016-06-12 22:03:59

标签: doctrine-orm symfony

有没有办法动态地(从php脚本)在db中创建和修改实体和表?

例如,我想从数组中生成一个实体:

fields{
    id: integer,
    name: string,
    ... and so on
}

而不是在bd中生成一个表

我只知道一个简单的解决方案:创建yml或xml文件并从我的脚本运行控制台命令,或者使用DBAL

1 个答案:

答案 0 :(得分:2)

  

我只知道一个简单的解决方案:创建yml或xml文件并从我的脚本运行控制台命令,或者使用DBAL

您还可以generate an entity from command line,例如:

$ php app/console generate:doctrine:entity --no-interaction \
    --entity=AcmeBlogBundle:Post \
    --fields="id:integer title:string(100) body:text" \
    --format=xml

这使用了SensioGeneratorBundle,即defined only in dev and test environments

所以,它有点hacky但是你需要在合适的环境中调用这个命令:

$ php app/console generate:doctrine:entity […] --env=dev

可以使用Process component来启动此命令。

所以你最终会得到这样的东西:

use Symfony\Component\Process\Process;
use Symfony\Component\Process\Exception\ProcessFailedException;

$command = 'php app/console generate:doctrine:entity --no-interaction '.
    '--entity=AcmeBlogBundle:Post '.
    '--fields="id:integer title:string(100) body:text" '.
    '--format=xml';

$process = new Process($command);
$process->run();

// executes after the command finishes
if (!$process->isSuccessful()) {
    throw new ProcessFailedException($process);
}

echo $process->getOutput();