我在symfony 2中配置了book
和author
个这样的表:
author.orm.yml:
Author:
type: entity
table: null
id:
id:
type: integer
id: true
generator:
strategy: AUTO
fields:
firstname:
type: string
length: '255'
lastname:
type: string
length: '255'
lifecycleCallbacks: { }
book.orm.yml
Book:
type: entity
table: null
id:
id:
type: integer
id: true
generator:
strategy: AUTO
fields:
title:
type: string
length: 255
manyToOne:
verbatim:
targetEntity: Author
joinColumn:
onDelete: CASCADE
lifecycleCallbacks: { }
是否有可能在我的作者实体中有一个方法来获取所有书籍。
示例:
/** @var Author $author */
$author = $em->getRepository('Author')->findOne();
/** @var Book[] $bookList */
$bookList = $author->getAllBooks()
我想在我的实体中创建这样一个方法但是evebody发誓上帝EntityManager不会从实体中加入。
你怎么看?
此致
FIX:
在我的author.orm.yml中添加:
oneToMany:
page:
targetEntity: Book
mappedBy: book
非常感谢@metalvarez
答案 0 :(得分:1)
我认为你需要多对一的双向关系,检查一下这个question Doctrine应该找到你所有的书,你只需要在你的作者实体中为你的书籍属性创建你的getter和setter,让doctrine做其余部分。
答案 1 :(得分:0)
您需要创建EntityRepositories并将此实体的功能放在那里。实体类只应提供变量(代表列)以及getter和setter。
在控制器中你可以做这样的事情
$em = $this->getManager()->getRepository('Path\To\Your\Entity\');
$books = $em->getAllBooksByAuthorId($id);
该功能" getAllBookgsByAuthorId"将在RepositoryClass中实现
class BookRepository extends Doctrine\ORM\EntityRepository{
public function getAllBooksByAuthorId($id){
$qb = $this->createQueryBuilder('b')
->select()
->where('authorId = ' . $id);
return $qb->getQuery()->getResult();
}
}
更多信息here