3

2つのエンティティ間で双方向の関連付けを行おうとしています。問題は、本からは所有者を取得できますが、所有者からは本を所有することができないということです。

コードの重要な部分は次のとおりです。

Acme \ BookBundle \ Entity \ Book;

/**
 * @ORM\ManyToOne(targetEntity="Acme\UserBundle\Entity\User", inversedBy="owned_books")
 * @ORM\JoinColumn(name="owner_id", referencedColumnName="id")
 */
protected $owner;

/**
 * Get owner
 *
 * @return Acme\UserBundle\Entity\User 
 */
public function getOwner()
{
    return $this->owner;
}

Acme \ UserBundle \ Entity \ User;

/**
 * @ORM\OneToMany(targetEntity="Acme\BookBundle\Entity\Book", mappedBy="owner")
 */
protected $owned_books;

public function __construct()
{
    $this->owned_books = new \Doctrine\Common\Collections\ArrayCollection();
}

/**
 * Get owned_books
 *
 * @return Doctrine\Common\Collections\Collection 
 */
public function getOwnedBooks()
{
    return $this->owned_books;
}

次に、データを取得するには:

この作品

$book = $this->getDoctrine()
  ->getRepository('BookBundle:Book')
  ->find(1);

$owner = $book->getOwner()->getFirstName();

これは機能しません(致命的なエラーが発生します:未定義のメソッドDoctrine \ ORM \ PersistentCollection :: getName()を呼び出します)

$owner = $this->getDoctrine()
    ->getRepository('UserBundle:User')
    ->find(1);

$books = $owner->getOwnedBooks()->getName();

誰かが私が間違っていることを知っていますか?前もって感謝します。

4

2 に答える 2

10

$ owner-> getOwnedBooks()は所有者のコレクションです。foreachループを使用してコレクションをループしてみてください。

$books = $owner->getOwnedBooks();
foreach ($books as $book) {
    echo $book->getName() . ' <br/>';
} 
于 2012-06-14T08:43:03.690 に答える
3

エラーメッセージは非常に明確です。単一の本の名前を取得しようとしているのではなく、本のコレクションの名前を取得しようとしているのです。

于 2012-06-14T08:42:41.727 に答える