/** * @param Site $site * @param $id * @return mixed * @throws \Doctrine\ORM\NonUniqueResultException */ public function findOneBySiteAndType(Site $site, $id) { $siteIds = $site->getParentSiteIds(); array_push($siteIds, $site->getId()); $q = $this->createQueryBuilder('o')->where('o.site IN (:site_ids)')->leftJoin('o.branch', 'b')->andWhere('o.deleted = 0')->setParameter('site_ids', $siteIds); $siteBranch = $site->getSettings()->getBranch(); $siteType = $site->getSiteType(); $siteTypeKey = ''; if (isset($siteType)) { $siteTypeKey = $siteType->getKeyName(); } if (isset($siteBranch) && $siteTypeKey == 'branch') { $q->andWhere('o.id = :id AND b.id = :branch_id'); $q->setParameter('id', $id); $q->setParameter('branch_id', $siteBranch->getId()); } else { $q->andWhere('o.id = :id'); $q->setParameter('id', $id); } $result = $q->getQuery()->getOneOrNullResult(); return $result; }