首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Doctrine2 findBy关系对象触发字符串转换错误

Doctrine2 findBy关系对象触发字符串转换错误
EN

Stack Overflow用户
提问于 2011-01-07 03:41:27
回答 3查看 29.4K关注 0票数 21

假设我在Doctrine2中有两个相互关联的实体,Models\User和Models\Comment。如果我在Doctrine 2.0.0中这样做...

代码语言:javascript
复制
<?php
// $em instanceof EntityManager, $user instanceof Models\User
$comments = $em->getRepository('Models\Comment')
    ->findBy(array('user' => $user, 'public' => true));

...I得到一个PHP错误:

严重性:注意

消息:类模型的对象\用户到字符串的转换

文件名: DBAL/Connection.php

行号: 574

这不应该发生,对吧?如果我使用QueryBuilder和setParameter('user',$user),它会按预期工作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-07 19:30:47

允许按关系查询,但您必须在其中传递Identifier。暂不支持按对象查询,仅支持2.1版本。

代码语言:javascript
复制
<?php
// $em instanceof EntityManager, $user instanceof Models\User
$comments = $em->getRepository('Models\Comment')
->findBy(array('user' => $user->getId(), 'public' => true));
票数 33
EN

Stack Overflow用户

发布于 2018-08-28 17:58:45

对于symfony 4.1,这段代码适用于我。

代码语言:javascript
复制
$comments = $this->getDoctrine()
                ->getRepository(Models\Comment::class)
                ->findBy(
                ['user' => $user->getId(), 'public' => true]
);
票数 2
EN

Stack Overflow用户

发布于 2011-01-07 10:23:41

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

在这种情况下,最好编写一个带有findByUser方法的自定义存储库类。

代码语言:javascript
复制
<?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
    }

}

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

代码语言:javascript
复制
<?php

namespace App\Domain\Entity;


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

    // entity definition

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4619071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档