Symfony 2关系问题


Symfony 2 relations issue

我需要帮助。

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

我可以很容易地访问使用BookCategory表的书和类别,但我不知道如何做到这一点,通过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实现想要的结果?

在您的代码中,您只建立了从BookCategoryBook的关系。就像你说的,你可以把Book和一个BookCategory联系起来。要以另一种方式获得属于同一本书的所有BookCategory,还需要指定此关系。你想要的是从BookBookCategoryOneToMany关系。

<?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;
     //...
}

在添加了必要的getter和setter之后,getBookCategories()将为您提供一个包含所有属于BookBookCategory的数组。

要了解更多细节,请查看官方Symfony2文档:http://symfony.com/doc/current/book/doctrine.html relationship-mapping-metadata

编辑:

包含use语句。修正了bookIdinversedBy属性