在'ApplicationEntity #user'中找不到目标实体


ZF2: The target-entity cannot be found in 'ApplicationEntity #user'

我使用Zend Framework 2和Doctrine2。我使用User和Project实体。一个用户可以拥有多个业务群组,一个业务群组可以拥有多个用户。所以我使用另一个实体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__,
            ),
        ),
    );
}
}

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'
))))),
user Entity中的

最好将user属性重命名为userProjects或projects,并对User_Project

中的关系定义进行更改。

检查数据库中的列名。如果你想要正确的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);