1

想知道是否有其他人遇到过这个问题。总之,我们从 Symfony 2.0 升级到 Symfony 2.1。使用 Symfony 2.1,如果创建一个全新的包,然后创建一个与 Doctrine 一起使用的实体,我会得到一个"not a valid entity or mapped super class". 如果我将相同的实体类(具有适当的路径更改)放入现有包(在 2.1 之前创建)中,即使从新包中也可以毫无问题地访问它。

以下是步骤。

$ 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;
}
}

从这里运行

$ php app/console doctrine:generate:entities "Core/TestBundle/Entity/Product" 

或从代码运行到
[Doctrine\ORM\Mapping\MappingException] Class Core\TestBundle\Entity\Product is not a valid entity or mapped super class.运行中访问产品
$ php app/console doctrine:schema:update --force 会产生“Nothing to update”

另一方面,如果我使用诸如 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可以正常工作。我试图比较捆绑配置等,但无法提出任何建议。

我还按如下方式运行数据库创建脚本。

$ php app/console doctrine:database:drop --force 

删除名为 dev 的连接的数据库

$ php app/console doctrine:database:create 

为名为 dev 的连接创建数据库 除了产品表之外,所有表都已创建。

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

4

2 回答 2

2

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

entity_managers:
        sql_write:
            connection: sql_write
            mappings:
                CoreUserBundle : ~
                CoreImageBundle : ~
                CoreTestBundle : ~
于 2012-09-10T18:22:52.913 回答
0

一个学说:模式:验证应该可以帮助您发现错误...它将检查您的映射,并检查映射是否与数据库同步。

于 2012-09-05T13:57:52.413 回答