私はFOSUserBundleを使用するSymfony 2.7 Webアプリケーションを開発中です。これまではすべてうまく動作します。管理バックエンドを追加して、異なるユーザーの詳細を表示することはできません。他のユーザーのデータへのアクセス方法は?
$contact_count = $this->contactsCountForUser(5);
...
public function contactsCountForUser($user_id) {
$repo = $this->em->getRepository('AppBundle:Contact');
$qb = $repo->createQueryBuilder('c');
$qb->select('COUNT(c)');
$qb->where('c.user = :userId');
$qb->setParameter('userId', $user_id);
$sql = $qb->getQuery()->getSql();
$count = $qb->getQuery()->getSingleScalarResult();
return $count;
}
以下は、SQLクエリとして作成されますので、これは、失敗します:
SELECT COUNT(c0_.guid) AS sclr0 FROM contact c0_ WHERE (c0_.user_id = ?) AND (c0_.user_id = '1')
選択したユーザーが作成したどのように多くの連絡先を参照することができるはずの電話帳Appで例えば
、
問題1: なぜ$qb->where('c.user = :userId')
はc0_.user_id = ?
に翻訳されていますか?なぜ5 beeingがuser_idとして使われていないのですか?
問題2: AND (c0_.user_id = '1')
が自動的にクエリに追加されます。私はこれが現在のユーザーにクエリを制限するFOSUserBundleによって行われると仮定します。ここでID 1は現在ログインしているユーザーのIDです。これはAdminです...明らかに(c0_.user_id = ?) AND (c0_.user_id = '1')
は真実ではありません。
So:DoctrineやFOSUserBundleを納得させるには、管理者が他のユーザーのデータに対してクエリを実行できるようにする必要がありますか?
サードパーティのコードの一部がUserAware
注釈としてSQLFilterを追加します。@LBAのコメントに
パラメータ '$ user_id'は有効ですか?彼の価値をダンプしようとしてみてください... –
はい私は。変数を削除し、 'qb-> setParameter( 'userId'、5)'や 'qb-> setParameter( 'userId'、 '5')'(引用符で5)のようなハードコーディングされた値を使用しても、同じ結果を得る –
あなたはクエリが正しいと思われ、何も間違っているとは思えません...今度はあなたの関数 'print 'メソッド内でこのコードを追加しようとします:public function contactsCountForUser($ user_id)';' maybe ** contactsCountForUser **は他のところで再定義されています.... –