当使用裸机Doctrine和开箱即用的命令行时,有两个命令可用,使用Doctrine和Symfony以及app/console
:
dbal
dbal:import Import SQL file(s) directly to Database.
dbal:run-sql Executes arbitrary SQL directly from the command line.
有没有办法在Symfony的app/console
?
答案 0 :(得分:8)
我找到了一个解决方法,因为你可以称之为,或者只是一种启用命令的方法。
通过将Command
添加到您自己的一个捆绑包(或专用捆绑包,由您自己决定),您可以简单地将Doctrine命令子类化。例如。要启用dbal:import
命令,请使用以下命令:
namespace Acme\Bundle\AcmeBundle\Command\Doctrine;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper;
use Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper;
class ImportCommand extends \Doctrine\DBAL\Tools\Console\Command\ImportCommand {
protected function execute(InputInterface $input, OutputInterface $output)
{
$container = $this->getApplication()->getKernel()->getContainer();
$doctrine = $container->get('doctrine');
$em = $doctrine->getEntityManager();
$db = $em->getConnection();
$helperSet = $this->getHelperSet();
$helperSet->set( new ConnectionHelper( $db ), 'db' );
$helperSet->set( new EntityManagerHelper( $em ), 'em' );
parent::execute( $input, $output );
}
}
如您所见,我们只是将原始命令子类化。由于数据库配置由Symfony管理,我们需要通过容器获取实体管理器。一旦我们更新HelperSet
,我们就会将执行传递回父类。
答案 1 :(得分:5)
将此cli-config.php
放入项目的根目录。这将为--env
启用php vendor/bin/doctrine
参数。它受Symfony的app / console文件“启发”。
请注意,这适用于Doctrine< = 2.3,有关较新版本,请参阅the docs。
<?php
require_once __DIR__.'/app/bootstrap.php.cache';
require_once __DIR__.'/app/AppKernel.php';
use Symfony\Component\Console\Input\ArgvInput;
$input = new ArgvInput();
$env = $input->getParameterOption(array('--env', '-e'), getenv('SYMFONY_ENV') ?: 'dev');
$debug = getenv('SYMFONY_DEBUG') !== '0' && !$input->hasParameterOption(array('--no-debug', '')) && $env !== 'prod';
$kernel = new AppKernel($env, $debug);
$kernel->boot();
$em = $kernel->getContainer()->get('doctrine.orm.entity_manager');
$helperSet = new \Symfony\Component\Console\Helper\HelperSet(array(
'db' => new \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper($em->getConnection()),
'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($em)
));
return $helperSet;
答案 2 :(得分:1)
通过DoctrineBundle(从版本1.6.4开始),symfony项目中提供了Doctrine命令。
您现在可以运行 else:
row = q_a[self.current]
self.label['text'] = row["q"]
self.button1['text'] = row["a"][0]
self.button2['text'] = row["a"][1]
self.button3['text'] = row["a"][2]
self.button4['text'] = row["a"][3]
。