3

symfony2のadmingeneratorモジュールでdoctrineormを使用していますが、2つのテーブルを含む選択カウントを実行できません。 これについての考えを本当にいただければ幸いです。よろしくお願いします!

これはquerybuilder式です:

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();
    }
}

私が使用している2つのエンティティは次のとおりです。

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;
....

Friendshipsのアソシエーションアノテーションはdoctrine:generate-entities(Users.fbidからのfbidの外部キー参照を含む)によって自動的に生成されましたが、Users(1:n)のアノテーションは私の知る限り手動で挿入されました。

クエリビルダーとアノテーションを何度も編集しようとしましたが、最終的には次のようになります。

テンプレートのレンダリング中に例外がスローされました(「キャッチ可能な致命的なエラー:クラスDoctrine \ ORM \ PersistentCollectionのオブジェクトをC:\ xampp \ htdocs \ symfony2 \ app \ cache \ dev \ twig\eaで文字列に変換できませんでした\ 85 \ 2b678090e942db52cc01e3950dbc.php line 225 ")Admingenerated / ShlomiUsersBundle / Resources / views / UsersList / index.html.twig atline92。

ありがとう、イオン

4

1 に答える 1

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');

クエリビルダー($ qb)を作成してからクエリを形成するこの2段階のプロセスは、$ qbメソッド(expr()やcount()など)を使用できるようにするために重要です。

于 2012-12-13T01:32:46.217 に答える