Php 新创建的捆绑包中的Symfony 2.1原则
想知道是否还有其他人遇到过这个问题。总之,我们从Symfony 2.0升级到Symfony 2.1。对于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
“不是有效的实体或映射的超类”
。如果我将相同的实体类(经过适当的路径更改)放入现有的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 : ~