Как я могу обрабатывать CollectionType с EntityType (несколько) внутриPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу обрабатывать CollectionType с EntityType (несколько) внутри

Сообщение Anonymous »

Предположим, у меня есть два объекта: Пользователь и Журнал. Сначала между этими двумя у меня было ManyToMany, но затем мне понадобилось дополнительное поле для управления количеством журнала на пользователя, поэтому я создал объект UserMagazine и разделил ManyToMany следующим образом: User --> OneToMany --> UserMagazine 1
[*]Журнал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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»