Ich habe dieses Szenario: eine Entität Person, ein Repository für Person und einen ausgewählten Formulartyp.Wie kann ich die Methode der Entität in einem Repository-Abfrage-Generator aufrufen
Ich sollte in meiner ausgewählten Form nur aktive Person nehmen.
In der Entität gibt es eine öffentliche Methode "isActive", die überprüft, ob eine Person die Berechtigung zum Zugriff in meinem privaten Bereich hat. Diese Methode gibt true oder false zurück und ist keine Spalte in der db-Tabelle, sie wird berechnet.
Ich muss auf dieses Flag von meinem Querybuilder im Personenrepository zugreifen. Ist es möglich? unter dem Code meines Querybuilders im Repository.
public function getQueryBuilderForEventRegistration()
{
$queryBuilder = $this->createQueryBuilder('e')->orderBy('e.surname', 'asc')->addOrderBy('e.name', 'asc');
return $queryBuilder;
}
und die öffentliche Methode in der Entität Person tha ti Zugriff haben:
public function getIsActive()
{
if (empty($this->getUser()))
{
return false;
}
if (!$this->getUser()->isEnabled())
{
return false;
}
/* @var $service \Siderweb\SubscriptionBundle\Entity\UserService */
foreach ($this->getUser()->getServices() as $service)
{
if (!$service->getIsExpired())
{
return true;
}
}
return false;
}
und mein Typ:
$builder->add('personExist', 'entity', array(
'class' => 'MyAppUserBundle:Person',
'property' => 'name',
'required' => false,
'multiple' => false,
'mapped' => false,
'empty_value' => '-- New person --',
'query_builder' => function(PersonRepository $repo) use ($options) {
return $repo->getQueryBuilderForEventRegistration();
}
))
wie vorgeschlagen, dass ich mein Repository wie folgt bearbeiten:
public function getQueryBuilderForEventRegistration(Company $company = null, Event $event = null, $emailFilter = null)
{
$queryBuilder = $this->createQueryBuilder('e')->orderBy('e.surname', 'asc')->addOrderBy('e.name', 'asc');
$people = $queryBuilder->getQuery()->execute();
$peopleToShow = array();
foreach ($people as $person)
{
if ($person->getIsActive())
{
array_push($peopleToShow, $person);
}
}
return $peopleToShow;
}
aber jetzt ich nicht k jetzt, wie man dieses Array in meine typeForm legt. Irgendeine Idee?
Ich weiß nicht, ob es möglich ist, aber Sie können dies in Ihrem Controller tun, und fügen Sie den Parameter zu Ihrer Funktion hinzu: getQueryBuilderForEventRegistration ($ param) und tun, was Sie wollen mit param – Letsrocks
Wie komplex ist Ihre benutzerdefinierte Funktion? – goto