Mam stworzone 4 encje, które są złączone [User] one to many [Owner] one to many [Property] one to many [Expeneses]. Chce stworzyć formularz dodający Wydatki[Expenses], a w nim wybór nieruchomości zalogowanego użytkownika. Użyłem podczas budowania formularza querybuilder ale nie wiem jak przekazać parametr Wyświetla błąd.
FormType:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TextType::class, array(
'label' => 'Nazwa wydatku'))
->add('price', MoneyType::class, array(
'label' => 'Cena',
'currency' => 'false'
))
->add('createDate', DateType::class, array(
'label' => 'Data'
))
->add('property', 'entity', array(
'label' => 'Nieruchomość',
'class' => 'User\UserBundle\Entity\User',
'property' => 'adress',
'empty_value' => 'Wybierz adres',
'query_builder' => function(UserRepository $repository) use($options)
{ return $repository->getQueryBuilder($options['User']);}
))
->add('submit', SubmitType::class, array(
'label' => 'Dodaj',
))
;
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'User\UserBundle\Entity\User'
));
}
}
controler
public function newAction(Request $request)
{
$User = $this->getUser()->getUsername();
$expense = new Expenses();
$form = $this->createForm(ExpensesType::class,array('User'=>$User), $expense);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($expense);
$em->flush();
return $this->redirectToRoute('expenses_index');
}
return array(
'expense' => $expense,
'form' => $form->createView(),
);
}
Repozytorium User:
class UserRepository extends \Doctrine\ORM\EntityRepository
{
public function getQueryBuilder($User){
// $User = $this->getUser()->getUsername();
$qb = $this->createQueryBuilder('u')
->select('u,o,p,op')
->LeftJoin('u.owner','o')
->LeftJoin('o.property','p')
->LeftJoin('p.expenses','ep')
-
->where('u.username = :user')
->setParameter('user', $User)
->getQuery()
->getArrayResult();
return $qb;
}