我正在使用Symfony2,当我尝试生成架构($ php app / console doctrine:generate:schema)时出现错误..
[Doctrine\ORM\Mapping\MappingException] No mapping file found named 'xxx.UserBundle.Entity.User.php' for class 'xxx\UserBundle\Entity\User'.
我在proyect中只有2个Bundles:
我使用以下代码将FileBundle与UserBundle连接:
/**
* @ORM\ManyToOne(targetEntity="xxx\UserBundle\Entity\User")
**/
protected $user;
文件的标题是这样的:
namespace xx\UserBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
**/
class User
{ ###...###}
FileBundle非常相似.. 谢谢!
答案 0 :(得分:26)
您正在混合Doctrine映射格式,您在Resources / config / doctrine中有注释和至少一个XML文件
来自symfony docs:
"A bundle can accept only one metadata definition format. For example,
it's not possible to mix YAML metadata definitions with annotated PHP
entity class definitions."
所以解决方案是:
您不能在给定的包中混合使用不同的Doctrine映射格式。因此要么为所有实体使用注释,要么为所有实体使用XML。
答案 1 :(得分:4)
对于我来说,使用PHPDriver进行ORM而不是AnnotationDriver,这有点奇怪,因为类中的数据库信息是注释。
无论如何,如果php app/console doctrine:mapping:info
命令只给你一个实体意味着你的另一个包含User类的包没有加载到app / AppKernel.php文件中。通过添加行
new xxx\UserBundle\xxxUserBundle(),
到$bundles
函数中的registerBundles()
数组。之后,此函数应如下所示:
public function registerBundles()
{
$bundles = array(
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
new Symfony\Bundle\TwigBundle\TwigBundle(),
new Symfony\Bundle\MonologBundle\MonologBundle(),
new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
new Symfony\Bundle\DoctrineBundle\DoctrineBundle(),
new Symfony\Bundle\AsseticBundle\AsseticBundle(),
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(),
new xx\FileBundle\xxFileBundle(),
new xxx\UserBundle\xxxUserBundle(),
);
if (in_array($this->getEnvironment(), array('dev', 'test'))) {
$bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
$bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
$bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
}
return $bundles;
}
当然,用你的真名改变'xx'和'xxx'。
希望这有帮助。
答案 2 :(得分:4)
我同意@ilanco 100%。此外,解决方案是删除文件夹中的任何.xml文件,例如:
C:\ XAMPP \ htdocs中\ localxyz \ SRC \的appbundle /资源/配置/教义/ Comment.orm.xml
运行此命令时创建的这些xml文件:
C:\ xampp \ htdocs \ localxyz> php app / console doctrine:mapping:import --force AppBundle xml
粪。
答案 3 :(得分:1)
美好的一天,
虽然我知道这已经在几年前发布了,但是我想在这里发布我的答案,也许它可以帮助某人:)
只是简单地清除缓存,但它适用于我
php bin/console cache:clear
由于
答案 4 :(得分:0)
我想不出为什么会发生这种情况,但我会在这里实现一个飞跃。
尝试编辑config.yml
。 doctrine
部分应如下所示:
doctrine:
dbal:
default_connection: my_connection_name
connections:
fmefb:
host: %database_host%
dbname: %database_name%
user: %database_user%
password: %database_password%
driver: %database_driver%
port: %database_port%
charset: UTF8
orm:
default_entity_manager: my_entity_manager
entity_managers:
my_entity_manager:
connection: my_connection_name
mappings:
CompanyNameSiteBundle: ~
CompanyNameAdminBundle: ~
CompanyNameSomethingElse: ~
注意底部的mappings
列表。所有“链接”的包都包含在这里。
希望这会有所帮助......