Daniel
Daniel

Reputation: 541

Symfony 2 form + showing data from a relation

I am using Symfony 2 with doctrine. I currently have an entity called Worker and in the Worker entity there is a Many To One relationship with a User entity.

/**
 * @ORM\ManyToOne(targetEntity="User")
 * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
 */
private $user;

There are more entities like Worker as well such as Manager and such. I want to create a form that creates a Job entity. In the form I am trying to create a select option that selects a Worker, but the worker's name is stored in the user database. Is there any way to print the worker's name from the user database in the form options.

$builder->add('workers','entity', [
    'label' => 'Workers:',
    'property' => 't.user.firstName',
    'empty_value' => 'Choose a Worker',
    'class' => 'Company\CompanyBundle\Entity\Worker',
    'query_builder' => function (\Company\CompanyBundle\Repository\WorkerRepository $repository) {
            return $repository->createQueryBuilder('t')
                ->add('orderBy', 't.user.firstName ASC');
        }
    ]);

Any ideas?

Upvotes: 1

Views: 2732

Answers (2)

Daniel Guerrero
Daniel Guerrero

Reputation: 194

If you prefer, you could do this other option:

$builder->add('workers', 'entity', array(
    'class' => 'Company\CompanyBundle\Entity\Worker',
    'property' => 'property_name'
));

If you defined the option "property" you don't need implement the "_toString()" in the entity class

Upvotes: 0

alghimo
alghimo

Reputation: 2899

I think that it would be enoough to do something like this:

$builder->add('workers', 'entity', array(
            'class' => 'Company\CompanyBundle\Entity\Worker',
        ) );

Besides, you should implement a "__toString()" method in your Worker entity where you would return whatever you want to show (in this case, the worker name), so your __toString method in the Worker entity would be something like this:

function __toString() {
    return $this->getName();
}

It's the way I usually implement this kind of relations, I hope it helps!

Upvotes: 3

Related Questions