/** * @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(); }
/** * @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(); }