Doctrine2 Findby Relationship Objectは、文字列変換エラーをトリガーします
-
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]
);
所属していません StackOverflow