我想在 Doctrine Create Schema 事件中将一些记录插入数据库(一些用于外键约束的默认数据)。
这个函数通过命令行(在 Symfony2 中)通过触发来调用:
php app/console doctrine:schema:update --force
运行此命令时,Doctrine2 为数据库生成模式。
有没有办法对此做出反应并将数据插入数据库?
谢谢!
我想在 Doctrine Create Schema 事件中将一些记录插入数据库(一些用于外键约束的默认数据)。
这个函数通过命令行(在 Symfony2 中)通过触发来调用:
php app/console doctrine:schema:update --force
运行此命令时,Doctrine2 为数据库生成模式。
有没有办法对此做出反应并将数据插入数据库?
谢谢!
创建一个新的控制台命令将完成您所寻找的。
命令代码
MyCool/Bundle/Command/GenerateSchemaUpdateCommand.php
<?php
namespace MyCool\Bundle\Command;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class GenerateSchemaUpdateCommand extends ContainerAwareCommand
{
    /**
     * Configure command, set parameters definition and help.
     */
    protected function configure()
    {
        $this
            ->setName('mycoolbundle:schema:update')
            ->setDescription('Perform my custom schema update.')
            ->setHelp(sprintf(
            'Performs the doctrine:schema:update plus adds our custom records. \n' .
                PHP_EOL
        ));
    }
    /**
     * Execution Code
     * @param \Symfony\Component\Console\Input\InputInterface $input
     * @param \Symfony\Component\Console\Output\OutputInterface $output
     */
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $output = system('php -f app/console doctrine:schema:update --force');
        // do your custom things here.
        echo $output;
    }
}
执行你的命令
php -f app/console mycoolbundle:schema:update
添加参数
您可以使用以下方法向命令添加参数:
addArgument('var_name', InputArgument::OPTIONAL, 'Help message...')
// InputArgument::REQUIRED is also available here
笔记
这样做可以让您在控制台命令中添加很多功能,此外,如果您选择需要它们,您将可以直接访问您的模型和实体。
它将帮助您加载初始数据。