api platform ManyToMany persist

670 views Asked by At

I need to persist a ManyToMany relation with api platform, but i get a error, i've tried with cascade={"persist"} and with groups.

When i send the request with the object, i get; Nested documents for attribute "idVehicles" are not allowed. Use IRIs instead.

{
      "name": "carl",
      "lastName": "abs",
      "idVehicles": [
            {
                "license": "1212121"
            }
     ]
}

here is my users entity:

/**
 * Users
 *
 * @ORM\Table(name="users")
 * @ORM\Entity
 * @ApiResource(
 *      attributes={"pagination_enabled"=false},
 *      normalizationContext={"groups"={"users_read"}},
 *      denormalizationContext={"groups"={"users_write"}},
 *  )
 */
class Users
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="SEQUENCE")
     * @ORM\SequenceGenerator(sequenceName="users_id_seq", allocationSize=1, initialValue=1)
     * @Groups({"users_read", "users_write"})
     */
    private $id;

    /**
     * @var string|null
     *
     * @ORM\Column(name="name", type="string", length=128, nullable=true)
     * @Groups({"users_read", "users_write"})
     */
    private $name;

    /**
     * @var string|null
     *
     * @ORM\Column(name="last_name", type="string", length=128, nullable=true)
     * @Groups({"users_read", "users_write"})
     */
    private $lastName;


    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="Vehicles", mappedBy="idUsers", cascade={"persist"})
     * @Groups({"users_read", "users_write"})
     */
    private $idVehicles;
}

here is my vehicles entity:

/**
 * Users
 *
 * @ORM\Table(name="users")
 * @ORM\Entity
 * @ApiResource(attributes={"pagination_enabled"=false})
 */
class Users
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="SEQUENCE")
     * @ORM\SequenceGenerator(sequenceName="vehicles_id_seq", allocationSize=1, initialValue=1)
     */
    private $id;

    /**
     * @var string|null
     *
     * @ORM\Column(name="license", type="string", length=16, nullable=true, cascade={"persist"})
     * @Groups({"users_read", "users_write"})
     */
    private $license;



    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="Users", inversedBy="idUsers")
     * @ORM\JoinTable(name="users_vehicles",
     *   joinColumns={
     *     @ORM\JoinColumn(name="id_vehicles", referencedColumnName="id")
     *   },
     *   inverseJoinColumns={
     *     @ORM\JoinColumn(name="id_users", referencedColumnName="id")
     *   }
     * )
     */
    private $idUsers;

1

There are 1 answers

0
Ziko10 On

Are you sure you update your schema ? I test your code and it's working