symfonyeasyadmin

EasyAdmin 3.X - How to see related entities `toString` instead of the number of association in the list?


I have an entity Product with a ManyToMany relation to an entity Category

/**
 * @ORM\ManyToMany(targetEntity="App\Domain\Category", inversedBy="stalls")
 */
private $categories;

//...

/**
 * @return Collection|Category[]
 */
public function getCategories(): Collection
{
    return $this->categories;
}

In the ProductCrudController class I have the following configureFields method:

public function configureFields(string $pageName): iterable
{
    return [
        Field::new('name'),
        Field::new('description'),
        AssociationField::new('categories'),
    ];
}

When creating/editing a Product everything works as expected in the relation, but in the list of products instead of showing the related categories I see the number of categories the product has. How can I change this behaviour?

In the following image the first product has 1 category and the second one in the list has 2 different categories. I would like the name of the categories to be shown here.

enter image description here

As a side note: Category class has a __toString method returning the name of the category.

EDIT:

The behaviour I am looking for is the same as the Tags column in the following image:

enter image description here


Solution

  • You can format the value using the method formatValue like this :

    ->formatValue(function ($value, $entity) {
                    $str = $entity->getCategories()[0];
                    for ($i = 1; $i < $entity->getCategories()->count(); $i++) {
                        $str = $str . ", " . $entity->getCategories()[$i];
                    }
                    return $str;
                  })