Моя текущая настройка описана ниже. Я хочу добиться. У одного дистрибьютора может быть несколько категорий. Но в категории Один может быть 1 Дистрибьютор 1: N <=> N: 1. Но это не удается, когда я нажимаю создать категорию, даже если поле ввода дистрибьютора пусто.
Категория
/**
* @var string
*
* @ORM\Id()
* @ORM\Column(type = "string", nullable=false, unique=true)
* @ORM\GeneratedValue(strategy = "UUID")
*/
private $id;
/**
* @var string
* @ORM\Column(type = "string", nullable=false)
*/
private $title;
/**
* @var Distributor
* @ORM\ManyToOne(targetEntity = "AppBundle\Entity\Distributor", inversedBy = "category")
* @ORM\JoinColumn(referencedColumnName = "id")
*/
private $distributor;
Распределитель:
/**
* @ORM\Column(type = "integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy = "AUTO")
*/
private $id;
/**
* @ORM\Column(type = "string", length=100)
*/
private $name;
/**
* @var ArrayCollection
* @ORM\OneToMany(targetEntity = "AppBundle\Entity\Category", mappedBy = "distributor")
*/
private $category;
public function __construct()
{
$this->category = new ArrayCollection();
}
КатегорияФорма:
$builder
->add('parent', EntityType::class, [
'class' => Category::class,
'choice_label' => 'title',
'multiple' => true,
'required' => false,
'attr' => [
'class' => 'select2 form-control select2insidemodal js-example-matcher'
]
])
->add('title', TextType::class, [
'label' => 'Title',
'required' => true,
'by_reference' => true
])
->add('distributor', EntityType::class, [
'class' => Distributor::class,
'choice_label' => 'name',
'required' => false,
'attr' => [
'class' => 'select2 form-control select2insidemodal js-example-matcher'
]
]);
Создать действие категории
public function createAction(Request $request)
{
$category = new Category();
$categoryForm = $this->createForm(CategoryForm::class, $category);
$categoryForm->handleRequest($request);
if ($categoryForm->isSubmitted() && $categoryForm->isValid()) {
$result = $this->categoryService->create($category);
}
return $this->render(
'@app_bar/Category/categoryNew.twig',
[
'form' => $categoryForm->createView(),
]
);
}
Я получаю сообщение об ошибке:
Expected argument of type "AppBundle\Entity\Category", "Doctrine\Common\Collections\ArrayCollection" given
если родитель - это коллекция? или это только одна Категория?






Как я понял, parent не является коллекцией, поэтому измените параметр множественного родительского элемента формы на false:
->add('parent', EntityType::class, [
'class' => Category::class,
'choice_label' => 'title',
'multiple' => false,
'required' => false,
'attr' => [
'class' => 'select2 form-control select2insidemodal js-example-matcher'
]
])
да, я тоже это нашел. Но спасибо за ответ. Но есть еще одна проблема, которую я пока не могу решить! Все добавленные категории добавляются как высшая категория. Но если я редактирую категорию, я должен иметь возможность выбрать несколько категорий и разместить их как дочерние в моей родительской категории. Как я могу с этим справиться?
добавить дочерние поля OneToMany
это / было уже OneToMany, я создал работу, чтобы получить все значения детей и поместить и родительское значение через CategoryService. Если у вас есть лучшее решение, пожалуйста, помогите.
как насчет вашего родительского поля? вы можете предоставить его аннотацию?