2014-07-20 6 views
0

나는 두려운 도움이된다.Symfony 2 관계 문제

3 개의 엔티티가 있습니다. 도서, 카테고리 및 BookCategory - 책은 여러 카테고리를 가질 수 있으므로 다른 테이블을 사용했습니다.

BookCategory 테이블을 사용하여 책과 카테고리에 쉽게 액세스 할 수 있지만 책> 분류 카테고리로 분류하는 방법은 잘 모릅니다. 난 내 기관을 config (설정)하는 방법이나 내 DQL 원하는 결과를 실현하려 할 필요가 어떻게

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; 

?

+1

@TimoSta가 말한 것에 덧붙여서, 주석의'inversedBy' 속성을 올바르게 설정해야합니다. 현재 엔티티 자체가 아닌'targetEntity' 엔티티의 속성으로 설정되어야하기 때문에 오류가 발생해야합니다. – RoToRa

+0

@ RoToRa이 작업을 수행하는 방법을 보여줄 수 있습니까? –

답변

2

코드로는 BookCategory에서 Book 사이의 관계 만 설정했습니다. 말씀 드린대로 BookBookCategory과 연결시킬 수 있습니다. 다른 방법으로 이동하여 하나의 서적에 속한 BookCategory을 얻으려면이 관계를 지정해야합니다. 원하는 것은 OneToMany 관계이며 Book에서 BookCategory까지입니다.

<?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() 당신에게 Book에 속하는 모든 BookCategory와 배열을 제공 할 것입니다. http://symfony.com/doc/current/book/doctrine.html#relationship-mapping-metadata

편집 : 포함 use

자세한 내용은

는 공식 Symfony2 문서를 보라. bookId에 대한 inversedBy 속성이 수정되었습니다.

+0

엔티티를 생성하려고 할 때 Annotation을 가져 오는 중 @onetomany가 가져 오지 않았습니다. –

+0

아마도 '사용'을 통해 주석을 가져 오지 않았기 때문일 수 있습니다. 내 편집 좀 봐. @RoToRa가 귀하의 질문에 댓글을 달았습니다. 'Book' 클래스의'bookId' 속성의'ManyToOne' 관계의'inversedBy' 속성이 수정되어야합니다. 나는 또한 편집에서 그것을 고쳤다. – Timo