从主要实体访问外来关系

时间:2014-04-15 13:01:12

标签: symfony doctrine

我在symfony 2中配置了bookauthor个这样的表:

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

2 个答案:

答案 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