PHP中的Doctrine 2 CLI命令

时间:2011-05-13 01:56:24

标签: doctrine mapping command-line-interface

嘿所有人。我正在编写一个程序,它将转换我们数据库中的一些数据,然后调用Doctrine从所述Mysql数据库结构构建YAML文件。我在PHP中使用Doctrine。但是,我无法弄清楚如何从PHP中调用CLI命令。以下是Doctrine 2 CLI命令,它可以满足我的需求。

php ./doctrine orm:convert-mapping --filter =“users” - from-database yml ./test

此命令适用于Linux命令行,但如何通过Doctrine对象执行相同的操作?我不想只使用PHP exec语句向shell发送命令。我希望使用Doctrine对象模型。

2 个答案:

答案 0 :(得分:1)

唐:!

显然这不是一种非常常见的编程方法。但是,我通过PHP EXEC命令调用它来使用PHP中的Doctrine。我知道你说你不想这样做。但是,它确实很有效。以下是此类解决方案的示例。

$cmd_string = "php ./doctrine orm:generate-entities --generate-annotations=1 --regenerate-entities=1 $this->entity_file_dir";
$result = array();
exec($cmd_string, &$result);

希望这有帮助,   -Don!

答案 1 :(得分:0)

在尝试直接从PHP脚本执行命令时,我偶然发现了这个问题,而没有使用CLI。

特别是,我需要拨打 orm:ensure-production-settings 。 每个Doctrine命令都有自己的类:http://www.doctrine-project.org/api/orm/2.4/namespace-Doctrine.ORM.Tools.Console.Command.html

我通过以下方式解决了这个问题:

$entityManager = ...; // Get the entity manager somehow in your application

// Creates the helper set
$helperSet = \Doctrine\ORM\Tools\Console\ConsoleRunner::createHelperSet($entityManager);

// Initializes the desired command and sets the helper set
// In your case it should be ConvertMappingCommand instead
$command = new \Doctrine\ORM\Tools\Console\Command\EnsureProductionSettingsCommand();
$command->setHelperSet($helperSet);

// Initializes the input
// Alternatives: http://api.symfony.com/2.0/Symfony/Component/Console/Input.html
$input = new \Symfony\Component\Console\Input\ArgvInput(); // Input coming from the CLI arguments

// Initializes the output
// Alternatives: http://api.symfony.com/2.0/Symfony/Component/Console/Output.html
$output = new \Symfony\Component\Console\Output\ConsoleOutput(); // Prints the output in the console

// Runs the command
$command->run($input, $output);

我是Doctrine的新手,所以我不确定这是如何工作的,但确实如此。任何评论都表示赞赏。