2011-05-24 99 views
3

稍微背景信息:我正在将Doctrine集成到CodeIgniter应用程序中。我有它的工作,但我希望能够从浏览器运行Doctrine命令行(CLI)任务,即不能从命令行脚本运行。运行Doctrine 2 CLI工具从浏览器运行的脚本中的任务

我希望这样做的原因是因为我将在一个共享托管软件包上运行Doctrine和CodeIgniter,因此我不会访问命令行。

这似乎是一个非常基本的功能,但没有现成的使用Doctrine 2

我最后的努力将进入命令行工具,并找出的任务是如何被执行,然后是复制CodeIgniter控制器中的代码。

如果有任何简单的方法可以做到这一点,请让我知道。

谢谢!

Unanswered duplicate过了一段时间。

+0

我刚刚在重复问题上发布了一个答案:http://stackoverflow.com/a/28788665/3132919 – federicojasson 2015-03-01 00:34:11

回答

0

您可能不想尝试在没有命令行的情况下运行命令行工具。

但是,您可以自己在脚本中完成它。举例来说,如果你想要做的事情,ORM:架构工具:*呢,你最好start here

+0

好吧,谢谢你的输入。为什么我不想在没有命令行的情况下执行命令行任务? – 2011-05-25 18:20:28

+0

好吧,经过反思,我想你可以。但为了我的钱,我宁愿不处理分析命令行输出等,如果它很容易驱动底层API本身。我想这取决于你想要做什么。如果你想要使用命令行路由,那么典型的exec(exec(),system(),shell_exec()...)就足够了。当然,如果你的共享主机不给你一个shell,他们可能会禁用这样的功能。 – timdev 2011-05-26 20:31:06

1

对于以下

$doctrine = \Zend_Registry::get('doctrine'); 
$em = $doctrine->getEntityManager(); 
$tool = new \Doctrine\ORM\Tools\SchemaTool($em); 

获取SQL来更新当前模式:

$sqlArray = $tool->getUpdateSchemaSql($em->getMetadataFactory()->getAllMetadata()); 

更新与当前的元数据

$res = $tool->updateSchema($em->getMetadataFactory()->getAllMetadata()); 

创建架构模式。

$res = $tool->createSchema($em->getMetadataFactory()->getAllMetadata()); 

这属于安装脚本。只需创建并验证db连接

$conn = $doctrine->getConnection(); 
$sql = "SELECT * FROM users"; 
try { 
    $stmt = $conn->query($sql); // Simple (too simple?) 
    die('Already installed'); 
} catch (Exception $e) { 
    // Table not found, continue 
} 

然后创建您的模式。

相关问题