Проблема при использовании повторяющихся полей AssociationField одной сущности EasyAdmin
EasyAdmin 4
Есть отношение M2M между Product и AttributeValue.
Строк в AttributeValue может быть тысячи и чтобы удобнее создавать/редактировать товары нужно разделить значения по атрибуту, что собственно и сделал через QueryBuilder, но появляется проблема при использовании повторяющихся AssociationField ('AttributeValues').
При редактировании или создании объекта отображается только поле (последнее) "Property #2".
Как это исправить?
AssociationField::new('attributeValues', 'Property #1')
->setQueryBuilder(function(QueryBuilder $qb) {
return $qb->andWhere('entity.attribute = 5');
}),
AssociationField::new('attributeValues', 'Property #2')
->setQueryBuilder(function(QueryBuilder $qb){
return $qb->andWhere('entity.attribute = 1');
}),
Ответы (2 шт):
Если у вас связь ManyToMany, соответственно, в вашей Entity свойство будет как ArrayCollection, в таком случае, можете попробовать подобный код с типом поля CollectionType. ModelType будет вложенный тип, который вы должны реализовать, по факту, отображение одного значения из коллекции attributeValues.
$builder->add('models', CollectionType::class, [
'label' => false,
'entry_type' => ModelType::class,
'allow_extra_fields' => true,
'entry_options' => [
'label' => false,
'model_repository' => $options['model_repository']
]
])
ModelType:
class ModelType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$currentModel = $options['model_repository']->find(
$builder->getForm()->getName()
);
$builder->add('model', null, [
'label' => $currentModel->getName()
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Model::class
]);
$resolver->setRequired('model_repository');
}
}
Решил данную проблему при помощи JS. Разделил общее поле на "подкатегории", а выбор загонял в общий select.