如何在Symfony 2.6中从实体创建数据库表

7
我目前所做的是 -> 我创建了一个捆绑包和其中的实体类,并使用以下命令从该实体类创建了一个名为“新闻”的数据库表:

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

一切都进行得很顺利。
现在,我创建了一个新的捆绑包和另一个实体类,我想从中创建一个名为“用户”的其他数据库表,但出现了错误:“名称为'symfony.news'的表已经存在”。
class user { 
   private $id; 
   private $userEmail; 

   public function getId() { 
       return $this->id; 
   } 

   public function setUserEmail($userEmail) { 
       $this->userEmail = $userEmail; 
       return $this; 
   } 
}
4个回答

13

您的实体不包含注释,Doctrine 不知道如何处理这个实体。但是如果您向实体添加类似以下内容的内容:

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="user")
 */
class User
{
    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=60, unique=true)
     */
    private $email;

    public function getId()
    { 
        return $this->id; 
    } 

    public function setUserEmail($userEmail)
    { 
        $this->userEmail = $userEmail; 
        return $this; 
    }
}

如果你像这样添加文件:User.orm.xml

<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
  <entity name="AppBundle\Entity\User" table="user">
    <unique-constraints>
      <unique-constraint name="UNIQ_797E6294E7927C74" columns="email"/>
    </unique-constraints>
    <id name="id" type="integer" column="id">
      <generator strategy="IDENTITY"/>
    </id>
    <field name="email" type="string" column="email" length="60" nullable="false"/>
  </entity>
</doctrine-mapping>

如果将内容放置于Resources/config/doctrine/目录下,您就能运行以下命令:

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

结果,您将获得:

Updating database schema...
Database schema updated successfully! "1" queries were executed

真正相信它会解决你的问题...


8

针对Symfony 4和4++版本:

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

对于Symfony 3:

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

1
php bin/console doctrine:schema:update --force 以上命令也适用于Symfony 5.2。 - Adnan Ahmad
是的,Symfony 4和4++:.php bin/console doctrine:schema:update --force - pdchaudhary
1
如果您只需要 SQL,而不是通过 PHP 实际迁移数据 - php bin/console doctrine:schema:update --dump-sql 命令可以将生成的 SQL 输出而不是尝试将其应用于 EntityManager 存储连接。有关更多信息,请参考文档:bin/console help doctrine:schema:create(该命令适用于 doctrine/orm 2.13)。 - jave.web

0
如果既不是 "php app/console doctrine:schema:update --force" 也不是 "php bin/console doctrine:schema:update --force"(你可能在使用 Windows 系统),你可以尝试:"php artisan doctrine:schema:update --force"。这是唯一对我有效的方法。

-1

为什么不使用Doctrine命令?

php app/console doctrine:generate:entity 

我按照你说的方式做了,但它只创建实体而没有在数据库中创建表格。这个命令 app/console doctrine:schema:update --force 在数据库中创建表格。问题是如何让这个命令读取所有包中的实体文件,并跳过如果表格已经存在就不创建,否则就创建这个表格。第一次运行该命令时,它可以完美地工作。 - Umair Malik
doctrine:schema:update 将更新所有表。如果表存在,则会检查是否有列更改,但不会重新创建表。 - Stev
1
此外,如果您在元数据(列定义、关系等)中更改了某些内容,则不能将旧表保持不变。因此,只要您不对旧实体进行修改,而仅添加新实体,doctrine:schema:update 就是安全的。 - Stev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接