Тип формы Symfony3 и отношение ManyToMany

Как настроить тип формы с отношением "многие ко многим"?

Ниже конфигурация ...

Форма / Тип / ProductType.php

$builder
    ->add('name')
    ->add('price')
    ->add('description', TextareaType::class)
    ->add('quantity')
    ->add('shopProductImages', EntityType::class, [
        'class'        => 'AppBundle:ShopProductImages',
        'choice_label'=>'file',
        'query_builder' => function (EntityRepository $repo) {
            return $repo->createQueryBuilder('f')
                ->where('f.id > :id')
                ->setParameter('id', 1);
        },

    ])

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults([
        'data_class' => ShopProducts::class,
    ]);
}

Entity / ShopProducts.php

/**
 * @ORM\Table(name = "shop_products")
 * @ORM\Entity
 */
class ShopProducts
{
    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity = "AppBundle\Entity\ShopProductImages", mappedBy = "shopProducts")
     */
    private $shopProductImages;

Entity / ShopProductImages.php

 * @ORM\Table(name = "shop_product_images")
 * @ORM\Entity
 */
class ShopProductImages
{
    /**
     * @var string
     *
     * @ORM\Column(name = "file", type = "text", length=255, nullable=true)
     */
    private $file;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name = "date_mod", type = "datetime", nullable=true)
     */
    private $dateMod;

    /**
     * @var integer
     *
     * @ORM\Column(name = "id", type = "integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy = "IDENTITY")
     */
    private $id;

    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity = "AppBundle\Entity\ShopProducts", inversedBy = "shopProductImages")
     * @ORM\JoinTable(name = "shop_product_images_has_shop_products",
     *   joinColumns = {
     *     @ORM\JoinColumn(name = "shop_product_images_id", referencedColumnName = "id")
     *   },
     *   inverseJoinColumns = {
     *     @ORM\JoinColumn(name = "shop_products_id", referencedColumnName = "id")
     *   }
     * )
     */
    private $shopProducts;

... заканчивается ошибкой Тип формы Symfony3 и отношение ManyToMany

не могли бы вы подробнее рассказать, что вы пытаетесь сделать? также попробуйте использовать "'class' => ShopProductImages: class" в вашей форме

Timo Jungblut 25.04.2018 09:28

Можете ли вы дать целостные сущности?

Pec 25.04.2018 09:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
2
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Первый ManyToMany имеет более одного варианта:

так что вам нужно определить, в чем ваш случай? это однонаправленный / двунаправленный и используйте правильный подход там

также вы можете рассмотреть действительно хороший совет от doctrine:

Why are many-to-many associations less common? Because frequently you want to associate additional attributes with an association, in which case you introduce an association class. Consequently, the direct many-to-many association disappears and is replaced by one-to-many/many-to-one associations between the 3 participating classes.

и что касается вашей ошибки, некоторые фрагменты кода отсутствуют, но ошибка объясняет сама: у вас есть файловый объект, который ожидает пути - должна быть строка - и вы даете ему объект - возможно, вы передаете весь файл - загляните в свой ShopController, чтобы увидеть, где устанавливается атрибут файла, и там вы можете отладить ошибку и, не видя кода, я думаю, это будет что-то вроде этого

setFile($fileObject)

вам нужно изменить на

setFile($fileObject->getPath());

в противном случае мне нужно увидеть код, чтобы исправить его.

Другие вопросы по теме