2

したがって、OneToManyとManyToOneの関係を持つ次の2つのクラスがあります。

名前空間RM\Entity;

Doctrine \ Common \ Collections\ArrayCollectionを使用します;

/ **
 * @Table(name = "users")
 * @実在物
 * @author Csabi
 * /
クラスユーザー{

    / **
     * @Id
     * @Column(name = "id"、type = "integer"、nullable = false)
     * @GeneratedValue(strategy = "IDENTITY")
     * @OneToMany(targetEntity = "JobListing"、mappedBy = "ownerId"、orphanRemoval = true)
     * /
    プライベート$id;

    / **
     * @var string $ displayname
     * @Column(type = "string"、nullable = false)
     * /
    プライベート$displayname;
}

名前空間RM\Entity;

Doctrine \ Common \ Collections\ArrayCollectionを使用します;

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

    / **
     * @var integer $ 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を保存するときに、persistを実行すると、次のエラーがスローされます。

アプリケーションエラー
例外情報:

メッセージ:クラスは存在しません
スタックトレース:

#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-> casinoPersist(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()

ここで何が欠けていますか?

4

2 に答える 2

2

問題は、実際には私が保存しようとしていたオブジェクトにありました。ユーザーエンティティ全体をownerIdに渡さず、ユーザーのIDのみを渡しました。

だからメソッドが

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

ユーザーエンティティの代わりに実際に番号を保存しようとしていたと呼ばれていました。

そのため、クラス「1」がなかったため、「クラスが見つかりません」というエラーがスローされました。

于 2012-06-05T12:01:40.583 に答える
1

主キーにリレーションを定義することはできません。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;
}
于 2012-06-01T10:29:36.853 に答える