Doctrine 2 findBy Relationship对象触发字符串转换错误?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

假设我在Doctrine 2中有两个相互关联的实体,模型\user和模型\注释。如果我用2.0.0原则来做这件事...

<?php
// $em instanceof EntityManager, $user instanceof Models\User
$comments = $em->getRepository('Models\Comment')
    ->findBy(array('user' => $user, 'public' => true));

我收到一个PHP错误:

Message: Object of class Models\User to string conversion

Filename: DBAL/Connection.php

Line Number: 574

提问于
用户回答回答于

允许按关系查询,但必须在其中传递标识符。还不支持按对象查询,只会使其变为2.1。

<?php
// $em instanceof EntityManager, $user instanceof Models\User
$comments = $em->getRepository('Models\Comment')
->findBy(array('user' => $user->getId(), 'public' => true));
用户回答回答于

不幸的是,我不认为关系查询是通过存储库对象直接支持的。

在本例中,最好使用findByUser方法编写自定义存储库类。

<?php

namespace App\Domain\Repository;

use Doctrine\ORM\EntityRepository,
    App\Domain\Entity\User;

class CommentRepository extends EntityRepository
{

    public function findByUser(User $user)
    {
        // add QueryBuilder code here
    }

}

不要忘记更新您的评论实体以使用自定义存储库:

<?php

namespace App\Domain\Entity;


/** 
 * @Entity(repositoryClass="App\Domain\Repository\CommentRepository")
 */
class Comment 
{

    // entity definition

}

扫码关注云+社区