坚持原则2“类不存在”

Posted

技术标签:

【中文标题】坚持原则2“类不存在”【英文标题】:Doctrine 2 "Class does not exist" on persist 【发布时间】:2012-06-06 12:52:48 【问题描述】:

所以我有这两个类,它们之间有 OneToMany 和 ManyToOne 关系:

命名空间 RM\Entity; 使用 Doctrine\Common\Collections\ArrayCollection; /** * @Table(name="用户") * @实体 * @作者萨比 */ 类用户 /** * @ID * @Column(name="id", type="integer", nullable=false) * @GeneratedValue(strategy="IDENTITY") * @OneToMany(targetEntity="JobListing", mappedBy="ownerId", orphanRemoval=true) */ 私人 $id; /** * @var 字符串 $displayname * @Column(type="string", nullable=false) */ 私人 $displayname;

命名空间 RM\Entity; 使用 Doctrine\Common\Collections\ArrayCollection; /** * @Table(name="job_listings") * @Entity(repositoryClass="RM\Entity\Repository\JobListingRepository") * @作者萨比 */ 类作业列表 /** * @var 整数 $id * @Column(name="id", type="integer", nullable=false) * @ID * @GeneratedValue(strategy="IDENTITY") */ 私人 $id; /** * @var 用户 * @ManyToOne(targetEntity="User",cascade="persist") * @JoinColumns( * @JoinColumn(name="ownerId", referencedColumnName="id", nullable=false) * ) */ 私人 $ownerId;

但是,当保存 JobListing 时,坚持它会引发以下错误:

应用程序错误 异常信息: 消息:类不存在 堆栈跟踪: #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()

我在这里错过了什么?

【问题讨论】:

【参考方案1】:

问题实际上出在我试图保存的对象中。我没有将整个用户实体传递给 ownerId,只有用户的 id。

所以当方法

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

被称为它实际上是在尝试保存一个数字而不是用户实体。

这就是抛出错误“Class not found”的原因,因为没有类“1”。

【讨论】:

【参考方案2】:

您不能在主键上定义关系。尝试在 User 类中添加另一个字段:

/**
 * @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;

【讨论】:

我这样做了,但它仍然给出相同的异常

以上是关于坚持原则2“类不存在”的主要内容,如果未能解决你的问题,请参考以下文章

类不存在默认构造函数

如果类不存在,则执行此操作,否则忽略

Tailwindcss:语法错误:`hover:rounded-xl` 类不存在

Android Activity 类不存在

Laravel 8:目标类不存在[重复]

Sonata 管理员/用户:“类不存在”(ReflectionException)