我需要帮助。
我有三个实体。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实现想要的结果?
在您的代码中,您只建立了从BookCategory
到Book
的关系。就像你说的,你可以把Book
和一个BookCategory
联系起来。要以另一种方式获得属于同一本书的所有BookCategory
,还需要指定此关系。你想要的是从Book
到BookCategory
的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;
//...
}
在添加了必要的getter和setter之后,getBookCategories()
将为您提供一个包含所有属于Book
的BookCategory
的数组。
要了解更多细节,请查看官方Symfony2文档:http://symfony.com/doc/current/book/doctrine.html relationship-mapping-metadata
编辑:包含use
语句。修正了bookId
的inversedBy
属性