Тип формы Symfony3 и отношение ManyToMany - PullRequest
0 голосов
/ 25 апреля 2018

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

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

Форма / тип / 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;

... заканчивается ошибкой image

1 Ответ

0 голосов
/ 25 апреля 2018

Первый ManyToMany имеет более 1 опции:

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

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

Почему ассоциации многие-ко-многим встречаются реже?Потому что часто вы хотите связать дополнительные атрибуты с ассоциацией, и в этом случае вы вводите класс ассоциации.Следовательно, прямая связь «многие ко многим» исчезает и заменяется ассоциациями «один ко многим» или «многие к одному» между 3 участвующими классами.

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

setFile($fileObject)

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

setFile($fileObject->getPath());

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...