2012-04-15 10 views
3

symfony2のadmingeneratorモジュールでdoctrine ormを使用していますが、2つのテーブルを含むselect countを実行できません。 私は本当にこれについての任意の考えに感謝します。ありがとうございます!私が使っている2つのエンティティがあるdoctrine orm count joinの1:n関係

class ListController extends BaseListController 
{ 
protected function getQuery() 
    { 
     $query = $this->getDoctrine() 
        ->getEntityManager() 
        ->createQueryBuilder() 
        ->select('q, count(f.fbid) AS no') 
        ->from('Shlomi\UsersBundle\Entity\users', 'q') 
        ->leftJoin('q.fbid' , 'f') 
        ->groupBy('q.fbid'); 


     $this->processSort($query); 
     $this->processFilters($query); 
       $this->processScopes($query); 

     return $query->getQuery(); 
    } 
} 

class Users 
{ 
    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var bigint $fbid 
    * 
    * @ORM\OneToMany(targetEntity="Friendships", mappedBy ="fbid") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="fbid", referencedColumnName="fbid") 
    * }) 
    */ 
    private $fbid; 
    .... 

class Friendships 
{ 
    /** 
    * @var integer $Id 
    * 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $Id; 

    /** 
    * @var Users 
    * 
    * @ORM\ManyToOne(targetEntity="Users", inversedBy="fbid") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="fbid", referencedColumnName="fbid") 
    * }) 
    */ 
    private $fbid; 
.... 

友情で関連注釈が持つのに対し

これはquerybuilder式です自動化されたユーザー(1:n)内の注釈が私の知る限り手動で挿入されたdoctrine:generate-entities(Users.fbidからのfbidの外部キー参照を含む)によって生成されたものです。

私は何度も何度も、クエリビルダと注釈を編集しようとしたが、最後に、私はこれを取得:

An exception has been thrown during the rendering of a template ("Catchable Fatal Error: Object of class Doctrine\ORM\PersistentCollection could not be converted to string in C:\xampp\htdocs\symfony2\app\cache\dev\twig\ea\85\2b678090e942db52cc01e3950dbc.php line 225") in Admingenerated/ShlomiUsersBundle/Resources/views/UsersList/index.html.twig at line 92.

おかげで、 イオン

+0

私は注釈を完全に誤解していたようです。 このページには関係を設定するための完全な情報が含まれていますが、それを理解するにはかなりの頭脳が必要です。 [関連](http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0 .x/reference/association-mapping.html) –

+0

ORMのようにdoctrineが動作するため、SQL文ではなくArrayCollection属性のオブジェクトからレコードを数える必要はありません。 $クエリ=の$ this - > getDoctrine() - > getEntityManager() - > createQueryBuilder() - >( 'Q、F ')を選択 - >(' Shlomi \ UsersBundle \エンティティ\ユーザー' から、 'q') - > leftJoin( 'q.friends'、 'f'); –

+1

'admingenerated/ShlomiUsersBundle/Resources/views/UsersList/index.html.twig'のコードで質問を更新できますか?少なくとも92行目をコーディングしてください。 – Kosta

答えて

1

試してみてください。

$qb = $this->getDoctrine() 
       ->getEntityManager() 
       ->createQueryBuilder(); 
    $query = $qb->select('q', $qb->expr()->count('f.fbid')) 
       ->from('Shlomi\UsersBundle\Entity\users', 'q') 
       ->leftJoin('q.fbid' , 'f') 
       ->groupBy('q.fbid'); 

これをquerybuilder($ qb)を作成してからクエリを作成する2段階のプロセスが重要ですので、$ qbメソッド(expr()やcount()など)を使用することができます