Как настроить тип формы с отношением "многие ко многим"?
Ниже конфигурация ...
Форма / Тип / 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;
Можете ли вы дать целостные сущности?




Первый 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());
в противном случае мне нужно увидеть код, чтобы исправить его.
не могли бы вы подробнее рассказать, что вы пытаетесь сделать? также попробуйте использовать "'class' => ShopProductImages: class" в вашей форме