如何更新实体和数据库

时间:2016-06-17 06:30:11

标签: php symfony doctrine-orm

我正在努力修复一些错误并为已经投入生产的项目添加新功能。

我需要做什么我觉得谁知道Symfony2和Doctrine很简单,但我是新手,我不知道如何实现我需要的东西:

我在PHP端有一个与数据库中的表相关联的现有实体。

我需要的是创建另一个与其他表有一些外键的实体。

我首先尝试将表创建到数据库中,但我不知道如何在PHP中创建关联实体(正确的注释指向外键)以及如何编辑需要新属性的其他实体在课堂上。

我还尝试过创建一个带注释的PHP类:

[Symfony\Component\Debug\Exception\FatalErrorException]                              
  Compile Error: Cannot redeclare MyProject\MyBundle\Entity\User::setDocumentNumber() 

然后,尝试创建getter和setter,启动命令:

    .controller('formCtrl', function($scope, $ionicModal, getUrl, $state, $rootScope) {
    $ionicModal.fromTemplateUrl('templates/instruction.html', {
        scope: $scope,
        animation: 'slide-in-up'
    }).then(function(modal) {
        $scope.modal = modal;
    });
    $scope.openModal = function() {
        $scope.modal.show();
    }
    $scope.closeModal = function() {
        $scope.modal.hide();
    }
    $scope.$on('modal.shown', function() {
        $rootScope.modelShown = true;
    });
    $scope.$on("$ionicView.enter", function(scopes, states) {
        if ($rootScope.modelShown != true) {
            $scope.openModal();
        }

    });
})

但它给了我那个错误:

{{1}}

因为它试图再次创建其他实体。

有人可以帮助我吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

为什么不尝试使用php app/console doctrine:generate:entity命令创建实体。这将询问您的Bundle名称,实体名称和列。

在此之后,您将在指定的包中创建.php文件。按照此URL手动添加当前和新实体之间的关系。

http://symfony.com/doc/current/book/doctrine.html#relationship-mapping-metadata

这是您在Symfony usng注释中提供 manyToOne 关系的方法,您可以切换到分配此关系的方式。 (YML或Symfony支持的任何其他内容)

 /**
     * @ORM\ManyToOne(targetEntity="Category", inversedBy="products")
     * @ORM\JoinColumn(name="category_id", referencedColumnName="id")
     */

并在目标实体中指定oneToMany,如此

/**
     * @ORM\OneToMany(targetEntity="Product", mappedBy="category")
     */

完成此操作后,运行以下命令以获取更改的SQL查询。

php pap/console doctrine:schema:update --dump-sql

您将拥有需要在生产环境中复制和运行的SQL查询输出。如果您的生产和测试环境相同,请执行以下命令。

php pap/console doctrine:schema:update --force

对于上述步骤,您不必在数据库中创建表。学说为你做到了。

如果您已经创建了表格,则可以删除该表格,因为它会在您强制架构时自动创建。