Zend2 框架 - 给映射异常的 Doctrine ORM

Posted

技术标签:

【中文标题】Zend2 框架 - 给映射异常的 Doctrine ORM【英文标题】:Zend2 Framework - Doctrine ORM giving Mapping Exception 【发布时间】:2014-01-02 04:01:10 【问题描述】:

我正在尝试将 Doctrine 2 ORM 用于我的 Zend2 应用程序之一。我在 composer 的帮助下使用 Doctrine 模块在应用程序中进行了设置。

我能够将数据持久化到数据库中,但是当我在对象管理器上进行 find() 调用时,它给了我一个映射异常,并显示以下消息。

Doctrine\Common\Persistence\Mapping\MappingException
File:
/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/MappingException.php:96
Message:
Class 'User' does not exist

以下是在Application模块配置文件下添加的Doctrine设置

'driver' => array(
                'application_entities' => array(
                        'class' =>'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
                        'cache' => 'array',
                        'paths' => array(__DIR__ . '/../src/Application/Entity')
                ),

                'orm_default' => array(
                        'drivers' => array(
                                'Application\Entity' => 'application_entities'
                        )
                )
        )
),

这是在 Application\src\Entity 文件夹下创建的用户实体

<?php
namespace Application\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
 *  @ORM\Entity
 */
class User 
/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="NONE")
 * @var int
 */
protected $user_id;

/**
 * @ORM\Column(type="integer")
 * @var int
 */
protected $network_id;

/**
 * @ORM\Column(type="string", length=64)
 * @var string
 */
protected $network_name;

/**
 * @ORM\Column(type="string", length=64)
 * @var string
 */
protected $job_title;

/**
 * @ORM\Column(type="string", length=64)
 * @var string
 */
protected $location;

/**
 * @ORM\Column(type="string", length=64)
 * @var string
 */
protected $first_name;

/**
 * @ORM\Column(type="string", length=64)
 * @var string
 */
protected $last_name;

/**
 * @ORM\Column(type="string", length=255)
 * @var string
 */
protected $url;

/**
 * @ORM\Column(type="string", length=255)
 * @var string
 */
protected $img_url;

/**
 * @ORM\Column(type="string", length=255)
 * @var string
 */
protected $department;

/**
 * @ORM\Column(type="string", length=255)
 * @var string
 */
protected $email_address;

/**
 * @ORM\Column(type="boolean")
 * @var string
 */
protected $verified;

/**
 * @return the int
 */
public function getUserId() 
    return $this->user_id;


/**
 * @param int $user_id
 */
public function setUserId($user_id) 
    $this->user_id = $user_id;
    return $this;


/**
 * @return the int
 */
public function getNetworkId() 
    return $this->network_id;


/**
 * @param int $network_id
 */
public function setNetworkId($network_id) 
    $this->network_id = $network_id;
    return $this;


/**
 * @return the string
 */
public function getNetworkName() 
    return $this->network_name;


/**
 * @param string $network_name
 */
public function setNetworkName($network_name) 
    $this->network_name = $network_name;
    return $this;


/**
 * @return the string
 */
public function getJobTitle() 
    return $this->job_title;


/**
 * @param string $job_title
 */
public function setJobTitle($job_title) 
    $this->job_title = $job_title;
    return $this;


/**
 * @return the string
 */
public function getLocation() 
    return $this->location;


/**
 * @param string $location
 */
public function setLocation($location) 
    $this->location = $location;
    return $this;


/**
 * @return the string
 */
public function getFirstName() 
    return $this->first_name;


/**
 * @param string $first_name
 */
public function setFirstName($first_name) 
    $this->first_name = $first_name;
    return $this;


/**
 * @return the string
 */
public function getLastName() 
    return $this->last_name;


/**
 * @param string $last_name
 */
public function setLastName($last_name) 
    $this->last_name = $last_name;
    return $this;


/**
 * @return the string
 */
public function getUrl() 
    return $this->url;


/**
 * @param string $url
 */
public function setUrl($url) 
    $this->url = $url;
    return $this;


/**
 * @return the string
 */
public function getImgUrl() 
    return $this->img_url;


/**
 * @param string $img_url
 */
public function setImgUrl($img_url) 
    $this->img_url = $img_url;
    return $this;


/**
 * @return the string
 */
public function getDepartment() 
    return $this->department;


/**
 * @param string $department
 */
public function setDepartment($department) 
    $this->department = $department;
    return $this;


/**
 * @return the string
 */
public function getEmailAddress() 
    return $this->email_address;


/**
 * @param string $email_address
 */
public function setEmailAddress($email_address) 
    $this->email_address = $email_address;
    return $this;


/**
 * @return the boolean
 */
public function getVerified() 
    return $this->verified;


/**
 * @param boolean $verified
 */
public function setVerified($verfied) 
    $this->verified = $verfied;
    return $this;

现在,当我从 Application 模块的 IndexController 对上述实体进行持久操作时,它工作正常。但是当我在同一个 IndexController 中使用同一个对象映射器进行查找操作时,它给出了映射异常。

以下是我的做法:

$objectManager = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
$objectManager->persist($user);
$objectManager->flush();
$user = $objectManager->find('User', $uniqueID);

谁能帮我解决这个问题?

问候。

【问题讨论】:

【参考方案1】:

你的实体不是User,而是Application\Entity\User。所以替换这一行:

$user = $objectManager->find('User', $uniqueID);

有了这个:

$user = $objectManager->find('Application\Entity\User', $uniqueID);

【讨论】:

感谢您的帮助。有效!!!!你知道有什么文件可以清楚地解释 Doctrine 2 ORM 吗??? 我只能说 Doctrine 手册本身 docs.doctrine-project.org/projects/doctrine-orm/en/latest/… 关于命名空间实体的文档并不多,因为所有高级开发人员都知道使用全限定类名(简称 FQCN)

以上是关于Zend2 框架 - 给映射异常的 Doctrine ORM的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis映射实体改造和异常问题

Zend 2 + Dojo 文档…

学习zend框架1.24的一个好的和完美的地方

Zend 2 网络套接字

使用 AutoMapper 映射两个模型

实体类和数据表的映射异常(XXX is not mapping[ ])