Php Doctrine2关联持久性

Php Doctrine2关联持久性,php,doctrine-orm,zend-framework2,Php,Doctrine Orm,Zend Framework2,在过去的一周左右的时间里,我一直在和Zend和Doctrine一起玩。我已经掌握了基本插入和选择的诀窍,还可以使用DQL从联接表中进行选择。我遇到的问题是关联实体的持久化。我得到的错误是:(路径)htdocs\vendor\doctor\common\lib\doctor\common\Persistence\Mapping\MappingException.php:96,消息“Class”不存在。 我的代码在下面 这是主要实体(位于“多”侧的实体) 这是“客户”关联实体 namespace P

在过去的一周左右的时间里,我一直在和Zend和Doctrine一起玩。我已经掌握了基本插入和选择的诀窍,还可以使用DQL从联接表中进行选择。我遇到的问题是关联实体的持久化。我得到的错误是:
(路径)htdocs\vendor\doctor\common\lib\doctor\common\Persistence\Mapping\MappingException.php:96,消息“Class”不存在。

我的代码在下面

这是主要实体(位于“多”侧的实体)

这是“客户”关联实体

namespace Project\Entity;

use Doctrine\ORM\Mapping as ORM;
use Zend\InputFilter\InputFilter;
use Zend\InputFilter\Factory as InputFactory;
use Zend\InputFilter\InputFilterAwareInterface;
use Zend\InputFilter\InputFilterInterface; 

/**
 * Client
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class Client implements InputFilterAwareInterface
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string
 *
 * @ORM\Column(name="client_name", type="string", length=255)
 */
private $clientName;

/**
 * @var integer
 *
 * @ORM\Column(name="loggable_hours", type="integer")
 */
private $loggableHours;

/**
 * @var float
 * 
 * @ORM\Column(name="normal_rate", type="decimal", scale=2)
 */
private $normalRate;

/**
 * @var float
 * 
 * @ORM\Column(name="critical_rate", type="decimal", scale=2)
 */
private $criticalRate;

/**
 * @var string
 *
 * @ORM\Column(name="start_date", type="string")
 */
private $startDate;

/**
 * @var boolean
 *
 * @ORM\Column(name="enabled", type="boolean")
 */
private $enabled;

/**
 * @var integer
 *
 * @ORM\Column(name="critical_hours", type="integer")
 */
private $criticalHours;

/**
 *
 * @var type 
 */
protected $_inputFilter;

//Other stuff (getters,setters, etc)
}
ClientUser与以下各项有一对一的关系:

namespace Project\Entity;

use Doctrine\ORM\Mapping as ORM;
use Zend\InputFilter\InputFilter;
use Zend\InputFilter\Factory as InputFactory;
use Zend\InputFilter\InputFilterAwareInterface;
use Zend\InputFilter\InputFilterInterface; 

/**
 * SystemUser
 *
 * @ORM\Table()
 * @ORM\Entity
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="user_type", type="integer")
 * @ORM\DiscriminatorMap({1 = "DeveloperUser", 2 = "ClientUser"})
 * 
 */
class SystemUser implements InputFilterAwareInterface {
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string
 *
 * @ORM\Column(name="username", type="string", length=100, unique=true)
 */
private $username;

/**
 * @var string
 *
 * @ORM\Column(name="password", type="string", length=255)
 */
private $password;

/**
 * @var string
 *
 * @ORM\Column(name="user_first_name", type="string", length=255)
 */
private $userFirstName;

/**
 * @var string
 *
 * @ORM\Column(name="user_surname", type="string", length=255)
 */
private $userSurname;

/**
 * @ORM\Column(type="string", length=32)
 */
private $salt;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="last_login", type="datetime")
 */
private $lastLogin = '0000-00-00 00:00:00';

/**
 * @var bool
 * 
 * @ORM\Column(name="enabled", type="boolean", options={"default" = 1})
 */
private $enabled = 1;

/**
 * For the input filter...
 * 
 * @var InputFilter
 */
protected $_inputFilter;

//The rest...
}
我完全不知道这里会出什么问题。。。为了完整起见,这里是控制器的“添加”操作

public function addAction() {
    //To add clients
    $form = new ClientUserForm($this->getServiceLocator()
                                     ->get('Doctrine\ORM\EntityManager'));
    $form->get('submit')->setValue('Add');

    $request = $this->getRequest();
    if ($request->isPost()) {
        $clientUser = new ClientUser();
        $form->setInputFilter($clientUser->getInputFilter());
        $form->setData($request->getPost());

        if ($form->isValid()) {
            $clientUser->populate($form->getData());
            /**
            *This bottom line is where I get the exception!
            */
            $this->getEntityManager()->persist($clientUser);
            $this->getEntityManager()->flush();

            //Redirect
            return $this->redirect()->toRoute('client_user');
        }
    }

    return array ('form' => $form);
}
任何帮助都会很棒!如果我只知道“”应该是哪个类,我可能会在一个比现在更好的地方! 谢谢女士们先生们,你们太棒了

编辑-

忘记添加这两个PHP警告

警告:spl\u object\u hash()要求参数1为对象,整数在1588行的(path)\htdocs\vendor\doctor\orm\lib\doctor\orm\UnitOfWork.php中给出


警告:get_class()希望参数1是对象,整数在第1596行的(path)\vendor\doctor\orm\lib\doctor\orm\UnitOfWork.php中给出。声明继承时,使用:

 * @ORM\DiscriminatorColumn(name="user_type", type="integer")
 * @ORM\DiscriminatorMap({1 = "DeveloperUser", 2 = "ClientUser"})
但是

  • 没有一个叫做DeveloperUser的类
而且

  • 您确定在数据库中,所有用户类型仅为1或2吗?(不为空、不为0等)
 * @ORM\DiscriminatorColumn(name="user_type", type="integer")
 * @ORM\DiscriminatorMap({1 = "DeveloperUser", 2 = "ClientUser"})