2011-01-06 6 views
17

Doctrine2には、Models \ UserとModels \ Commentという2つのエンティティがあります。私は教義2.0.0 ...Doctrine2 findByリレーションシップオブジェクトは文字列変換エラーを引き起こします

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

でこれを行う場合は...私はPHPのエラーを取得:

Severity: Notice

Message: Object of class Models\User to string conversion

Filename: DBAL/Connection.php

Line Number: 574

これは右、起こるべきではないのですか? QueryBuilderとsetParameter( 'user'、$ user)を使用すると、期待どおりに動作します。

答えて

30

クエリが許可されていますが、そこに識別子を渡す必要があります:

<?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 
    } 

} 

は、カスタムリポジトリを使用するようにコメントエンティティを更新することを忘れないでください。オブジェクトによるクエリはまだサポートされておらず、2.1にしかなりません。

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

@beberleiこんにちは、この機能がロードマップ(オブジェクトによるクエリ)に残っているかどうかは疑問でした。私はJiraを見てみましたが、何も見つかりませんでした。 – calumbrodie

+2

@beberlei:まだdoctrine 2.1.6でこの問題が起こっていますか? – greg0ire

0

残念ながら、リレーションシップによるクエリはリポジトリオブジェクトを介して直接サポートされているとは思いません。

この場合、findByUserメソッドを使用してカスタムリポジトリクラスを作成することをお勧めします。関係によって

<?php 

namespace App\Domain\Entity; 


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

    // entity definition 

}