Doctrine2 Findby Relationship Objectは、文字列変換エラーをトリガーします

StackOverflow https://stackoverflow.com/questions/4619071

  •  30-09-2019
  •  | 
  •  

質問

互いに関連する2つのエンティティ、モデルユーザーとモデルコメントを持っているとします。 Doctrine 2.0.0でこれを行うと...

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

... PHPエラーが発生します:

重大度:通知

メッセージ:クラスモデルのオブジェクトユーザーから弦楽

ファイル名:dbal/connection.php

行番号:574

これは起こるべきではありませんよね? QueryBuilderとsetParameter( 'user'、$ user)を使用すると、予想どおりに機能します。

役に立ちましたか?

解決

関係ごとのクエリは許可されていますが、そこに識別子を渡す必要があります。オブジェクトごとのクエリはまだサポートされておらず、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

}

Symfony 4.1の場合、このコードは私のために働きました。

$comments = $this->getDoctrine()
                ->getRepository(Models\Comment::class)
                ->findBy(
                ['user' => $user->getId(), 'public' => true]
);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top