2012-06-01 42 views
0

所以,我有兩個班,他們之間的一對多和多對一的關係:主義2「類不存在」在堅持

 
namespace RM\Entity; 

use Doctrine\Common\Collections\ArrayCollection; 

/** 
* @Table(name="users") 
* @Entity 
* @author Csabi 
*/ 
class User { 

    /** 
    * @Id 
    * @Column(name="id", type="integer", nullable=false) 
    * @GeneratedValue(strategy="IDENTITY") 
    * @OneToMany(targetEntity="JobListing", mappedBy="ownerId", orphanRemoval=true) 
    */ 
    private $id; 

    /** 
    * @var string $displayname 
    * @Column(type="string", nullable=false) 
    */ 
    private $displayname; 
} 

 
namespace RM\Entity; 

use Doctrine\Common\Collections\ArrayCollection; 

/** 
* @Table(name="job_listings") 
* @Entity(repositoryClass="RM\Entity\Repository\JobListingRepository") 
* @author Csabi 
*/ 
class JobListing { 

    /** 
    * @var integer $id 
    * @Column(name="id", type="integer", nullable=false) 
    * @Id 
    * @GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var User 
    * @ManyToOne(targetEntity="User",cascade={"persist"}) 
    * @JoinColumns({ 
    * @JoinColumn(name="ownerId", referencedColumnName="id", nullable=false) 
    * }) 
    */ 
    private $ownerId; 

然而,保存JobListing時,上堅持它會拋出以下錯誤:

 
Application error 
Exception information: 

Message: Class does not exist 
Stack trace: 

#0 library\Doctrine\ORM\Mapping\ClassMetadata.php(67): ReflectionClass->__construct(false) 
#1 library\Doctrine\ORM\Mapping\ClassMetadataFactory.php(350): Doctrine\ORM\Mapping\ClassMetadata->__construct(false) 
#2 library\Doctrine\ORM\Mapping\ClassMetadataFactory.php(260): Doctrine\ORM\Mapping\ClassMetadataFactory->newClassMetadataInstance(false) 
#3 library\Doctrine\ORM\Mapping\ClassMetadataFactory.php(169): Doctrine\ORM\Mapping\ClassMetadataFactory->loadMetadata(false) 
#4 library\Doctrine\ORM\EntityManager.php(247): Doctrine\ORM\Mapping\ClassMetadataFactory->getMetadataFor(false) 
#5 library\Doctrine\ORM\UnitOfWork.php(1222): Doctrine\ORM\EntityManager->getClassMetadata(false) 
#6 library\Doctrine\ORM\UnitOfWork.php(1678): Doctrine\ORM\UnitOfWork->doPersist(1, Array) 
#7 library\Doctrine\ORM\UnitOfWork.php(1252): Doctrine\ORM\UnitOfWork->cascadePersist(Object(RM\Entity\JobListing), Array) 
#8 library\Doctrine\ORM\UnitOfWork.php(1201): Doctrine\ORM\UnitOfWork->doPersist(Object(RM\Entity\JobListing), Array) 
#9 library\Doctrine\ORM\EntityManager.php(454): Doctrine\ORM\UnitOfWork->persist(Object(RM\Entity\JobListing)) 
#10 library\RM\Entity\JobListingService.php(54): Doctrine\ORM\EntityManager->persist(Object(RM\Entity\JobListing)) 
#11 application\controllers\JobListingController.php(28): RM\Entity\JobListingService->saveJobListing(Object(RM\Entity\JobListing)) 
#12 library\Zend\Controller\Action.php(516): JobListingController->addAction() 

我在這裏錯過了什麼?

回答

2

問題實際上是在我試圖保存的對象中。我沒有將整個用戶實體傳遞給ownerId,只有用戶的id。

所以,當被調用的方法

Doctrine\ORM\UnitOfWork->doPersist(1, Array) 

它實際上是試圖挽救一些,而不是用戶實體。

這就是爲什麼錯誤「找不到類」的原因,因爲沒有類「1」。

1

您無法定義主鍵上的關係。嘗試在用戶類中添加另一個字段:

/** 
* @Table(name="users") 
* @Entity 
* @author Csabi 
*/ 
class User { 

    /** 
    * @Id 
    * @Column(name="id", type="integer", nullable=false) 
    * @GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @OneToMany(targetEntity="JobListing", mappedBy="ownerId", orphanRemoval=true) 
    */ 
    private $jobListings; 

    /** 
    * @var string $displayname 
    * @Column(type="string", nullable=false) 
    */ 
    private $displayname; 
} 
+0

我這樣做,但它仍然給出相同的例外 –