Symfony 2关系问题

时间:2014-07-20 19:50:19

标签: php symfony doctrine-orm dql

我需要帮助。

我有3个实体。 Book,Category和BookCategory - book可以有多个类别,所以我使用了另一个表。

我可以轻松访问使用BookCategory表的Book和Category,但我不知道如何通过Book-> BookCategory-> Category。

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

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

     /**
      * @var Category
      * @ORM\ManyToOne(targetEntity="Category", inversedBy="Category")
      * @ORM\JoinColumn(name="parent", referencedColumnName="id")
      */
    private $parent;

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

     /**
      * @var Book
      * @ORM\ManyToOne(targetEntity="Book", inversedBy="BookCategory")
      * @ORM\JoinColumn(name="book_id", referencedColumnName="id")
      */
    private $bookId;

     /**
      * @var Category
      * @ORM\ManyToOne(targetEntity="Category", inversedBy="BookCategory")
      * @ORM\JoinColumn(name="category_id", referencedColumnName="id")
      */
    private $categoryId;

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

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

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

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

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

我如何配置我的实体或如何使我的DQL达到想要的结果?

1 个答案:

答案 0 :(得分:2)

使用您的代码,您只建立了从BookCategoryBook的关系。正如您所说,这使您可以将BookBookCategory相关联。 要以另一种方式获取属于一本书的所有BookCategory,您还需要指定此关系。您想要的是从OneToManyBook的{​​{1}}关系。

BookCategory

添加必要的getter和setter后,<?php //... use Doctrine\ORM\Mapping\OneToMany; class Book { //... /** * @OneToMany(targetEntity="BookCategory", mappedBy="bookId") */ private $bookCategories; //... } class BookCategory { //... /** * @var Book * @ORM\ManyToOne(targetEntity="Book", inversedBy="bookCategories") * @ORM\JoinColumn(name="book_id", referencedColumnName="id") */ private $bookId; //... } 将为您提供一个包含属于getBookCategories()的所有BookCategory的数组。

有关更多详细信息,请查看Symfony2官方文档: http://symfony.com/doc/current/book/doctrine.html#relationship-mapping-metadata

修改 包含Book声明。已更正use的{​​{1}}属性。