私はこのシナリオを持っています: エンティティPerson、Personのリポジトリ、および選択フォームタイプ。リポジトリクエリビルダのエンティティのメソッドを呼び出す方法
私は自分の選択したフォームをアクティブな人だけに入れてください。
エンティティには、個人が自分のプライベートエリアでアクセスする権限を持っているかどうかをチェックするパブリックメソッドisActiveがあります。このメソッドは、真または偽を返し、dbテーブルの列ではなく、計算されます。
Personリポジトリのquerybuilderからこのフラグにアクセスする必要があります。 可能ですか?リポジトリ内のmy querybuilderのコードの下に があります。
public function getQueryBuilderForEventRegistration()
{
$queryBuilder = $this->createQueryBuilder('e')->orderBy('e.surname', 'asc')->addOrderBy('e.name', 'asc');
return $queryBuilder;
}
と実体人の股関節のTIにおけるパブリックメソッドにアクセスする必要があります:私はこのように私のリポジトリを編集示唆したよう
$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 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;
}
と私のタイプ
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)とparamで何をしたいのですか? – Letsrocks
カスタム関数はどれくらい複雑ですか? – goto