/**
  * @param FamilyInterface $family
  * @param int|string      $reference
  * @param bool            $idFallback
  * @return null|DataInterface
  * @throws NonUniqueResultException
  */
 public function findByIdentifier(FamilyInterface $family, $reference, $idFallback = false)
 {
     $identifierAttribute = $family->getAttributeAsIdentifier();
     if (!$identifierAttribute) {
         if (!$idFallback) {
             return null;
         }
         return $this->findOneBy(['id' => $reference, 'family' => $family]);
     }
     $dataBaseType = $identifierAttribute->getType()->getDatabaseType();
     if ($identifierAttribute->getType() instanceof IdentifierAttributeType) {
         return $this->findOneBy([$dataBaseType => $reference, 'family' => $family]);
     }
     $qb = $this->createQueryBuilder('d');
     $joinCondition = "(id.attributeCode = :attributeCode AND id.{$dataBaseType} = :reference)";
     $qb->addSelect('values')->join('d.values', 'id', Join::WITH, $joinCondition)->join('d.values', 'values')->where('d.family = :familyCode')->setParameters(['attributeCode' => $identifierAttribute->getCode(), 'reference' => $reference, 'familyCode' => $family->getCode()]);
     return $qb->getQuery()->getOneOrNullResult();
 }
예제 #2
0
 /**
  * @param FamilyInterface $parent
  */
 protected function copyFromFamily(FamilyInterface $parent)
 {
     foreach ($parent->getAttributes() as $attribute) {
         $this->addAttribute($attribute);
     }
     $this->attributeAsLabel = $parent->getAttributeAsLabel();
     $this->attributeAsIdentifier = $parent->getAttributeAsIdentifier();
     $this->valueClass = $parent->getValueClass();
     $this->dataClass = $parent->getDataClass();
 }