Doctrine2 findBy 关系对象触发字符串转换错误
Posted
技术标签:
【中文标题】Doctrine2 findBy 关系对象触发字符串转换错误【英文标题】:Doctrine2 findBy relationship object triggers string conversion error 【发布时间】:2011-01-06 19:41:26 【问题描述】:假设我在 Doctrine2 中有两个相互关联的实体,Models\User 和 Models\Comment。如果我在 Doctrine 2.0.0 中这样做......
<?php
// $em instanceof EntityManager, $user instanceof Models\User
$comments = $em->getRepository('Models\Comment')
->findBy(array('user' => $user, 'public' => true));
...我收到一个 PHP 错误:
严重性:通知
消息:Models\User 类的对象到字符串的转换
文件名:DBAL/Connection.php
行号:574
这不应该发生,对吧?如果我使用 QueryBuilder 和 setParameter('user', $user) 它会按预期工作。
【问题讨论】:
【参考方案1】:允许按关系查询,但您必须在其中传递标识符。尚不支持按对象查询,仅支持 2.1。
<?php
// $em instanceof EntityManager, $user instanceof Models\User
$comments = $em->getRepository('Models\Comment')
->findBy(array('user' => $user->getId(), 'public' => true));
【讨论】:
@beberlei 嗨,我想知道此功能是否仍在路线图中(按对象查询)。我试图通过 Jira 寻找任何东西都没有成功 @beberlei : 教义 2.1.6 仍然存在这个问题,这正常吗?【参考方案2】:对于 symfony 4.1,这段代码对我有用。
$comments = $this->getDoctrine()
->getRepository(Models\Comment::class)
->findBy(
['user' => $user->getId(), 'public' => true]
);
【讨论】:
【参考方案3】:不幸的是,我不认为直接通过存储库对象支持按关系进行查询。
在这种情况下,您可能最好使用 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
【讨论】:
以上是关于Doctrine2 findBy 关系对象触发字符串转换错误的主要内容,如果未能解决你的问题,请参考以下文章