0

次のように、データベースへのクエリを作成する関数があります。

public function getList($u, $t, $ls, $lf) {
        return $this->getEntityManager()
            ->createQuery('
                    SELECT
                        o,
                        u,
                        g,
                        r,
                        t,
                        p
                    FROM GameShelfUsersBundle:Own o
                    LEFT JOIN o.user u
                    LEFT JOIN o.game g
                    LEFT JOIN o.rate r
                    LEFT JOIN o.typo t
                    LEFT JOIN o.platforms p
                    WHERE u.id = :user
                    AND o.typo = :type
                    ORDER BY o.updated DESC
                ')
            ->setParameters(array(
            'user' => $u,
            'type' => $t
            ))
            ->setMaxResults($lf)
            ->setFirstResult($ls)
            ->getResult();
    }

私の問題は、どのように設定:typeするのnot inですか? つまり、次のように使用したかったのです。

$type = '!= 1'
...
AND o.typo :type
...
'type' => $type

しかし、それはまったく機能しませんでした。使用$type = -1しても役に立ちません。if/else ステートメントを作成してクエリを複製する以外に方法はありますか?

4

1 に答える 1

1

クエリビルダーを使ってみませんか?

このようにして、条件に応じてクエリを簡単にカスタマイズできます。

これは例です:

$q = $this
        ->createQueryBuilder('foo')
        ->select('foo')
        ->leftJoin('foo.bar', 'foobar')
        ->leftJoin('foobar.bar', 'foobarbar')
        ;
if($myVar > 0)
{
 $q->where('foobarbar.var = :myVar');
}
else
{
 $q->where('foobarbar.var = :staticValue');
} 
[...]

return $q->getResult();最後に電話することを忘れないでください

于 2013-01-24T09:08:20.873 に答える