ZF2:在 'Application\Entity\ #user' 中找不到目标实体
Posted
技术标签:
【中文标题】ZF2:在 \'Application\\Entity\\ #user\' 中找不到目标实体【英文标题】:ZF2: The target-entity cannot be found in 'Application\Entity\ #user'ZF2:在 'Application\Entity\ #user' 中找不到目标实体 【发布时间】:2014-03-13 13:31:48 【问题描述】:我正在使用 Zend Framework 2 和 Doctrine2。 我使用用户和项目实体。一个用户可以有多个项目,一个项目可以有多个用户。所以我使用另一个实体 User_Project。 它们都已设置好,我已经验证了架构。所有映射文件都是正确的,并且数据库模式是同步的(orm:validate-schema)。 当我尝试获取所有用户时,我收到一个错误,即找不到目标实体(见标题)。当我尝试获取一个用户时,同样的错误。
错误
在“Application\Entity\User#user”中找不到目标实体 Application\Entity\User_Project。
控制器:
return $this->getEntityManager()->getRepository('Application\Entity\User')->findAll();
用户实体
namespace Application\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/** @ORM\Entity
* @ORM\Table(name="user")
**/
class User
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer", name="user_id")
*/
protected $user_id;
/** @ORM\Column(type="string") */
protected $fullName;
/** @ORM\OneToMany(targetEntity="User_Project", mappedBy="user") */
protected $user;
public function getUserId()
return $this->user_id;
public function getFullName()
return $this->fullName;
public function setFullName($value)
$this->fullName = $value;
项目实体
namespace Application\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/** @ORM\Entity
@ORM\Table(name="project")
**/
class Project
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer", name="project_id")
*/
protected $project_id;
/** @ORM\Column(type="string") */
protected $customer;
/** @ORM\Column(type="string") */
protected $project_name;
/** @ORM\OneToMany(targetEntity="User_Project", mappedBy="project") */
private $project;
public function getProjectId()
return $this->project_id;
User_Project 实体
namespace Application\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/** @ORM\Entity
* @ORM\Table(name="user_project")
**/
class User_Project
/**
* @ORM\Id()
* @ORM\ManyToOne(targetEntity="User", inversedBy="user")
* @ORM\JoinColumn(name="user_id", referencedColumnName="user_id", nullable=false)
*/
protected $user;
/**
* @ORM\Id()
* @ORM\ManyToOne(targetEntity="Project", inversedBy="project")
* @ORM\JoinColumn(name="project_id", referencedColumnName="project_id", nullable=false)
*/
protected $project;
public function getUser()
return $this->project;
public function getProject()
return $this->user;
public function setUser($value)
$this->user = $value;
public function setProject($value)
$this->project = $value;
Modules.php
namespace Application;
use Zend\Mvc\ModuleRouteListener;
use Zend\Mvc\MvcEvent;
class Module
public function onBootstrap(MvcEvent $e)
$eventManager = $e->getApplication()->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
public function getConfig()
return include __DIR__ . '/config/module.config.php';
public function getAutoloaderConfig()
return array(
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
【问题讨论】:
你为什么要使用一个额外的实体(User_Project)来实现实际上只是一个多对多关系? User_Project 可能会获得另一列,例如“功能”。另外,我从多对多关系开始,但我遇到了很多错误 仍然认为它应该是一个关系而不是一个单独的实体。列功能将特定于用户或项目而不是它们彼此之间的关系,对吗?解决许多错误并不是不使用 manyToMany 关系的真正正当理由.. 但是您当前的问题很可能可以通过以下方式解决:targetEntity="Application\Entity\User_Project" 不,已经尝试过了,但它给了我同样的错误。用户可以根据项目有不同的功能,所以它是项目特定的功能 【参考方案1】:可能你在 Module.php 或 module.config.php 中的实体定义是错误的。 请复制 Module.php 或 module.config.php
module.config.php 中的正确定义:
return array(
'doctrine' => array(
'driver' => array(
__NAMESPACE__ . '_driver' => array(
'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
'cache' => 'array',
'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
),
'orm_default' => array(
'drivers' => array(
__NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
))))),
在用户实体中可能更好地将用户属性重命名为 userProjects 或项目,并对 User_Project 上的关系定义应用更改
【讨论】:
我很抱歉更改答案。我是 *** 的新手。 @ORM\Id() in user_project 不应存在于用户和项目属性中 将其更改为 userProjects,同样的错误:在 'Application\Entity\User#userProjects' 中找不到目标实体 Application\Entity\User_Project。【参考方案2】:检查数据库中的列名。如果你想要正确的 db 。我推荐用于创建数据库的架构工具。
$tool = new \Doctrine\ORM\Tools\SchemaTool($this->getEntityManager());
$classes = array(
$this->getEntityManager()->getClassMetadata('Application\Entity\User'),
$this->getEntityManager()->getClassMetadata('Application\Entity\Project'),
$this->getEntityManager()->getClassMetadata('Application\Entity\User_Project'),
);
$tool->dropSchema($classes);
$tool->createSchema($classes);
在控制器或其他地方。
【讨论】:
我使用了学说 cli 来创建我的数据库:./vendor/bin/doctrine-module orm:schema-tool:create and update。我添加了你的代码,执行它没有问题,但之后我得到了同样的错误 可能你的数据不好。在 user_project 表列 user_id 在记录中为空。设置 nullable=true 并检查。 用lazy fetch docs.doctrine-project.org/en/2.0.x/tutorials/… 测试它并再次看到错误发生。在这种状态 user_project 不要尝试加载用户。以上是关于ZF2:在 'Application\Entity\ #user' 中找不到目标实体的主要内容,如果未能解决你的问题,请参考以下文章