我有這種情況: 實體Person,Person的存儲庫和選擇表單類型。如何在存儲庫querybuilder中調用實體的方法
我應該採取我選擇的形式只有活躍的人。
在實體中有一個公共方法「isActive」,用於檢查某個人是否有權在我的私人區域訪問。此方法返回true或false,並且不是db表中的列,它是計算的。
我需要從Person存儲庫中的querybuilder中訪問此標誌。 這可能嗎? 低於我的querybuilder在代碼庫中的代碼。
public function getQueryBuilderForEventRegistration()
{
$queryBuilder = $this->createQueryBuilder('e')->orderBy('e.surname', 'asc')->addOrderBy('e.name', 'asc');
return $queryBuilder;
}
,並在實體的公共方法人塔TI必須訪問:
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;
}
和我喜歡的類型:
$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();
}
))
的建議修改我的資料庫是這樣的:
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;
}
但現在我沒有k現在如何把這個數組放在我的typeForm中。任何想法?
我不知道它是否可行,但是你可以在你的控制器中做到這一點,並將參數添加到你的函數中:getQueryBuilderForEventRegistration($ param)並按照你的要求做你想要的參數 – Letsrocks
你的自定義函數有多複雜? – goto