Symfony2原则从控制器内部创建表和数据
我想在第一次在浏览器中打开symfony2项目时为该项目创建必要的表和数据 我有一个登录,这是主要的入口点。在这个操作中,我想做一些类似于创建表的事情,如果不存在“blub”。。等等 你知道我的意思吗?这可能吗?如何实现?我在网上找不到关于他的任何东西 我试过了Symfony2原则从控制器内部创建表和数据,symfony,Symfony,我想在第一次在浏览器中打开symfony2项目时为该项目创建必要的表和数据 我有一个登录,这是主要的入口点。在这个操作中,我想做一些类似于创建表的事情,如果不存在“blub”。。等等 你知道我的意思吗?这可能吗?如何实现?我在网上找不到关于他的任何东西 我试过了 $em = $this->getDoctrine()->getManager(); $query = $em->createQuery( "CREATE TABLE IF NOT EXIST
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
"CREATE TABLE IF NOT EXISTS `role` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`role` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UNIQ_57698A6A57698A6A` (`role`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40000 ALTER TABLE `role` DISABLE KEYS */;
INSERT INTO `role` (`id`, `name`, `role`) VALUES
(1, 'admin', 'ROLE_ADMIN'),
(2, 'station', 'ROLE_STATION');
/*!40000 ALTER TABLE `role` ENABLE KEYS */"
);
$products = $query->getResult();
但它告诉我错误:预期选择、更新或删除,得到“创建”。
所以我不可能像以前那样尝试
如果您能帮助我,我将非常高兴:)如果此类项目用于生产目的,则强烈建议不要使用从控制器(或在项目部署后的任何时间从控制台)加载的表创建/装置 你应该考虑一些类似的事情:
- 一种安装机制,可导致:
- 数据库模式创建
- 夹具加载
app/console doctrine:schema:update --force
--force
选项用于强制命令更改表格。请注意,删除列(实体属性)将不会保存它们的数据,这就是为什么在生产环境中不建议这样做的原因之一
请看一看
然后,加载“基本”数据称为“夹具加载”。你可以看看,以帮助自己使用它
编辑:
既然已经意识到这一点,那么应该考虑从控制器中调用命令(Schema:Update和Fix:Load)。
然而,关于这个问题的文献并不多。您可以从一个控制器上观察它的工作情况,因为您可以从它获取应用程序,然后调用文档中的命令
希望这有帮助:)如果已经创建了一个实体(例如,“AppBundle:Log”),那么它可能类似于(快速且脏的)
如果表“log_1”不存在,这将创建该表。谢谢您的提示,但我已经知道了。我想做的是创建一个独立的应用程序,一个不是程序员但拥有ftp权限的人可以上传symfony项目,在浏览器中调用它,它将“自行安装”。哇,太棒了!我不知道那是可能的!你有点像一个symfony专家,不是吗?:)
$schemaManager = $this->getDoctrine()->getConnection()->getSchemaManager();
if ($schemaManager->tablesExist(array('log_1')) == true) {
echo "table exists";
} else {
$manager = $this->getDoctrine()->getManager();
$metadata = $manager->getClassMetadata('AppBundle:Log');
$metadata->setPrimaryTable(array('name' => 'log_1'));
$schemaTool = new \Doctrine\ORM\Tools\SchemaTool($manager);
$schemaTool->createSchema(array($metadata));
}