Php 新创建的捆绑包中的Symfony 2.1原则

Php 新创建的捆绑包中的Symfony 2.1原则,php,symfony,doctrine-orm,symfony-2.1,Php,Symfony,Doctrine Orm,Symfony 2.1,想知道是否还有其他人遇到过这个问题。总之,我们从Symfony 2.0升级到Symfony 2.1。对于Symfony 2.1,如果创建一个全新的捆绑包,然后创建一个实体来与条令一起使用,我会得到一个“不是有效的实体或映射的超类”。如果我将相同的实体类(经过适当的路径更改)放入现有的bundle(在2.1之前创建)中,即使从新的bundle访问它也不会有任何问题 以下是步骤 $ php app/console generate:bundle --namespace="Core/TestBundl

想知道是否还有其他人遇到过这个问题。总之,我们从Symfony 2.0升级到Symfony 2.1。对于Symfony 2.1,如果创建一个全新的捆绑包,然后创建一个实体来与条令一起使用,我会得到一个
“不是有效的实体或映射的超类”
。如果我将相同的实体类(经过适当的路径更改)放入现有的bundle(在2.1之前创建)中,即使从新的bundle访问它也不会有任何问题

以下是步骤

$ php app/console generate:bundle --namespace="Core/TestBundle"--format=yml --no-interaction --structure=no --dir=src 
$ php app/console doctrine:generate:entity --entity="CoreTestBundle:Product" --fields="name:string(255) price:float description:text" 
下面是生成的Product.php代码

<?php

namespace Core\TestBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Core\TestBundle\Entity\Product
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class Product
{
/**
 * @var integer $id
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string $name
 *
 * @ORM\Column(name="name", type="string", length=255)
 */
private $name;

/**
 * @var float $price
 *
 * @ORM\Column(name="price", type="float")
 */
private $price;

/**
 * @var text $description
 *
 * @ORM\Column(name="description", type="text")
 */
private $description;


/**
 * Get id
 *
 * @return integer
 */
public function getId()
{
    return $this->id;
}

/**
 * Set name
 *
 * @param string $name
 * @return Product
 */
public function setName($name)
{
    $this->name = $name;
    return $this;
}

/**
 * Get name
 *
 * @return string
 */
public function getName()
{
    return $this->name;
}

/**
 * Set price
 *
 * @param float $price
 * @return Product
 */
public function setPrice($price)
{
    $this->price = $price;
    return $this;
}

/**
 * Get price
 *
 * @return float
 */
public function getPrice()
{
    return $this->price;
}

/**
 * Set description
 *
 * @param text $description
 * @return Product
 */
public function setDescription($description)
{
    $this->description = $description;
    return $this;
}

/**
 * Get description
 *
 * @return text
 */
public function getDescription()
{
    return $this->description;
}
}
或从代码中访问产品运行到
[Doctrine\ORM\Mapping\MappingException]类
Core\TestBundle\Entity\Product不是有效的实体或映射的超级
类。
正在运行

$php应用程序/控制台原则:模式:更新--force
生成“无需更新”

另一方面,如果我使用一个预先存在的bundle,比如ArticleBundle,并运行相同的命令

$ php app/console doctrine:generate:entity --entity="CoreArticleBundle:Product" --fields="name:string(255) price:float description:text"
$ php app/console doctrine:generate:entities "Core/ArticleBundle/Entity/Product"
$ php app/console doctrine:schema:update --force 
创建一个精细的表格 另外,从TestBundle访问产品作为
CoreArticleBundle:Product
也可以。 我试图比较捆绑包的配置等,但什么也做不出来

我还运行db创建脚本,如下所示

$ php app/console doctrine:database:drop --force 
已删除名为dev的连接的数据库

$ php app/console doctrine:database:create 
已为名为dev的连接创建数据库 创建了除Product one之外的所有表


此外,我还使用Product对象创建了一个fixture。同样的事情。在现有捆绑包中工作。与新创建的捆绑包中的上述错误相同。

条令:模式:验证应帮助您查找错误。。。它将检查您的映射,并检查映射是否与数据库同步。

与当地专家交谈。我们的应用程序使用了两个ORM管理器。在这种情况下,使用ORM的每个包都必须在app/config/config.yml中注册。即

entity_managers:
        sql_write:
            connection: sql_write
            mappings:
                CoreUserBundle : ~
                CoreImageBundle : ~
                CoreTestBundle : ~

如果不运行schema:update,则出现错误是正常的。奇怪的是schema:update生成“无需更新”。您是否检查了实体是否确实已创建且看起来正常?你试过运行条令:模式:创建吗?“从这里运行”是什么意思?你能在php应用程序/控制台规则:generate:entity--entity=“CoreTestBundle:Product”--fields=“name:string(255)price:float description:text”之后粘贴生成的产品实体的代码吗?“从这里运行”应该意味着“下一步是…”您是否尝试过运行条令:schema:create?php应用程序/控制台条令:数据库:create无法为名为dev SQLSTATE[HY000]的连接创建数据库:一般错误:1007无法创建数据库“dev”;数据库存在。我可以尝试删除并创建db?
$php应用程序/控制台条令:模式:验证[InvalidArgumentException]命令“条令:模式:验证”未定义。
我的Symfony软件包中是否未安装某些内容?请重新安装或更新供应商。。。您现在正在使用Composer更新您的sf2版本?最终更新了条令并能够运行“php应用程序/控制台条令:模式:验证”,它抱怨了一些其他文件,但对产品没有任何影响。产品实体似乎对学说不可见。有没有办法强制它?检查你的注释Syntax,Doctrine应该可以看到你的实体。仔细检查注释。在任何情况下,在ArticeBundle(在2.1之前创建)中都可以识别相同的代码,但在2.1之后创建的TestBundle中却不能识别
entity_managers:
        sql_write:
            connection: sql_write
            mappings:
                CoreUserBundle : ~
                CoreImageBundle : ~
                CoreTestBundle : ~