假设我在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));
...I得到一个PHP错误:
严重性:注意
消息:类模型的对象\用户到字符串的转换
文件名: DBAL/Connection.php
行号: 574
这不应该发生,对吧?如果我使用QueryBuilder和setParameter('user',$user),它会按预期工作。
发布于 2011-01-07 19:30:47
允许按关系查询,但您必须在其中传递Identifier。暂不支持按对象查询,仅支持2.1版本。
<?php
// $em instanceof EntityManager, $user instanceof Models\User
$comments = $em->getRepository('Models\Comment')
->findBy(array('user' => $user->getId(), 'public' => true));
发布于 2018-08-28 17:58:45
对于symfony 4.1,这段代码适用于我。
$comments = $this->getDoctrine()
->getRepository(Models\Comment::class)
->findBy(
['user' => $user->getId(), 'public' => true]
);
发布于 2011-01-07 10:23:41
不幸的是,我不认为通过存储库对象直接支持按关系查询。
在这种情况下,最好编写一个带有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
}
https://stackoverflow.com/questions/4619071
复制相似问题