想知道是否有其他人遇到过这个问题。总之,我们从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
产生“无需更新”
另一方面,如果我使用预先存在的捆绑包(例如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
创建表格
此外,以CoreArticleBundle:Product
从TestBundle访问产品也可以正常工作。
我试图比较捆绑配置等,但无法想出任何东西。
我还运行db创建脚本,如下所示。
$ php app/console doctrine:database:drop --force
已删除名为dev
的连接的数据库$ php app/console doctrine:database:create
为名为dev的连接创建数据库 除产品1外,所有表都已创建。
此外,我使用Product对象创建了一个fixture。一样。在现有捆绑中工作。与新创建的包中的错误相同。
答案 0 :(得分:2)
与当地专家交谈。原来我们的应用程序使用两个ORM管理器。在这种情况下,使用ORM的每个包必须在app / config / config.yml中注册。即
entity_managers:
sql_write:
connection: sql_write
mappings:
CoreUserBundle : ~
CoreImageBundle : ~
CoreTestBundle : ~
答案 1 :(得分:0)
一个学说:schema:validate应该可以帮助你找到错误......它将检查你的映射,并检查映射是否与数据库同步。