Reputation: 31
I nead help.
I have 3 entities. Book, Category And BookCategory - book can have multiple categories so i used another table.
I can easily acces Book and Category useing BookCategory table but i dont know how to do this by 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;
How i need to config my entities or how to make my DQL to achive wanted results?
Upvotes: 0
Views: 59
Reputation: 42460
With your code, you only established the relationship from BookCategory
to Book
. As you said, that enables you to get the Book
associated to one BookCategory
.
To go the other way and get all BookCategory
that belong to one book, you also need to specify this relationship. What you want is a OneToMany
relationship from Book
to 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;
//...
}
After adding the necessary getters and setters, getBookCategories()
will give you an Array with all BookCategory
that belong to the Book
.
For more details, have a look at the official Symfony2 documentation: http://symfony.com/doc/current/book/doctrine.html#relationship-mapping-metadata
Edit:
Included use
statement. Corrected inversedBy
property for bookId
.
Upvotes: 2