[*]Журнал3 --> 1
[*]Журнал4 --> 5
[*]Журнал2 --> 1
[*]Журнал3 --> 1
[*]Журнал4 --> 5
[*]Журнал2 --> 1 li>
Журнал5 -> 1
[*]Журнал6 -> 2
[/list]
актуальный рендер< /p>
Я хотел знать, смогу ли я иметь одну строку с несколькими EntityType (или ChoiceType) и назначить ей количество, чтобы форма была менее запутанной. Я ожидаю чего-то подобного:
- Журнал1, Журнал2, Журнал3, Журнал5 --> 1
- Журнал4 - -> 5
- Журнал6 --> 2
Вот пример моих объектов:
Пользователь:
class User
{
/**
*
* @ORM\Column(name="ID", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private ?int $id = null;
/**
*
* @ORM\Column(name="NAME", type="string", length=255, nullable=true)
*/
private ?string $name;
/**
* @ORM\OneToMany(targetEntity="UserMagazines", mappedBy="user", cascade={"persist", "remove"})
*/
private $userMagazines;
public function __construct()
{
$this->userMagazines = new ArrayCollection();
}
}
Журнал пользователей:
class UserMagazines
{
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="User", inversedBy="userMagazines")
* @ORM\JoinColumn(name="ID_USER", referencedColumnName="ID", nullable=true)
*/
private $user = null;
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Magazine", inversedBy="userMagazines")
* @ORM\JoinColumn(name="ID_MAGAZINE", referencedColumnName="ID", nullable=true)
*/
private $magazine = null;
/**
* @ORM\Column(name="QUANTITY", type="int")
*/
private int $quantity;
}
Журнал:
class Magazine
{
/**
*
* @ORM\Column(name="ID", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*
*/
private ?int $id = null;
/**
* @ORM\Column(name="NAME", type="string", length=255, nullable=true)
*/
private string $name;
/**
* @ORM\OneToMany(targetEntity="UserMagazines", mappedBy="magazine", cascade={"persist","remove"})
*/
private $userMagazines;
public function __construct()
{
$this->userMagazines = new ArrayCollection();
}
}
И мои формы:
Форма, которой принадлежит коллекция:
class UserMagazineEditType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('userMagazines', CollectionType::class, [
'entry_type' => UserMagazineForEditType::class,
'entry_options' => [
'data_class' => UserMagazines::class,
],
'label' => false,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
'attr' => [
'data-collection' => 'table',
]
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => User::class,
]);
}
}
Отрисовка формы по родительской форме:
class UserMagazineForEditType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('magazine', EntityType::class, [
'class' => Magazine::class,
'choice_label' => 'name',
'label' => 'Magazine',
'query_builder' => function (EntityRepository $er) use ($options): QueryBuilder {
return $er->createQueryBuilder('magazine');
},
]);
$builder->add('quantity', NumberType::class,
[
'label' => 'Quantity',
'required' => true,
]
);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => UserMagazines::class,
]);
}
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... ple-inside