代码之家  ›  专栏  ›  技术社区  ›  Dawid Szyszko

Symfony 2关系问题

  •  0
  • Dawid Szyszko  · 技术社区  · 10 年前

    我需要帮助。

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

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

        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 回复  |  直到 10 年前
        1
  •  2
  •   TimoStaudinger    10 年前

    使用您的代码,您只从 BookCategory Book 。正如您所说,这使您能够 关联到一个 账簿类别 . 走另一条路,得到一切 账簿类别 如果属于一本书,则还需要指定此关系。你想要的是 OneToMany 来自的关系 账簿类别 .

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

    在添加必要的吸气剂和setter之后, getBookCategories() 会给你一个数组 账簿类别 属于 .

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

    编辑: 包括 use 陈述已更正 inversedBy 的属性 bookId .