教義ODMで参照IDの配列を取得します。私は、ユーザーへの参照が会社に存在するかどうかをチェックし、への唯一の参照を保持する必要が私のコントローラで私は、ユーザーを参照Companyクラス持っ
/**
* @MongoDB\Document()
*/
class Company {
/* ... */
/**
* @MongoDB\ReferenceMany(targetDocument="Topboard\UserBundle\Document\User", inversedBy="companies")
*/
protected $users;
}
をそのユーザーは、他の参照ではありません。私はまた、複数のDB要求をユーザに与えたくない。参照のIDが$currentUserId
と一致するかどうかを確認したいだけです。調査の際
public function getCompanyAction($companyId, $currentUserId) {
$dm = $this->get('doctrine_mongodb')->getManager();
$company = $dm->getRepository('TopboardAppBundle:Company')->findOneById($companyId);
foreach ($company->getUsers() as $user) {
// Foreach will query each user separetly. This is not what I need.
// I need somehow access array of references' ids
// and compare them with the $currentUserId
if($user->getId() !== $currentUserId){
// Remove reference
}
}
return $company;
}
右のようなプロポーション音。では、UserクラスのIDゲッターを変更することをお勧めしますか?問題は、私が 'foreach'を実行すると、既にDBリクエストを引き起こすということです。 – Websirnik
いいえ、あなたのゲッターはそのまま残すべきです、自動生成されたプロキシクラスをチェックすることができます(通常は 'app/cache/lcl/doctrine/odm/mongodb/Proxies /'にあります)。 'foreach'に関しては、あなたの参照が最初のフェッチの後に文書内ですでに利用可能な所有側であるため、それ自身でクエリを起動すべきではありません。 – malarzm
私の場合、あなたのコードは正しいと思われ、この時点で追加のクエリを引き起こすべきではありません – malarzm