【问题标题】:Doctrine2 findBy relationship object triggers string conversion errorDoctrine2 findBy 关系对象触发字符串转换错误
【发布时间】: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) 它会按预期工作。

【问题讨论】:

    标签: php doctrine-orm


    【解决方案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
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-14
        • 2012-03-17
        相关资源
        最近更新 更多