0

多対多の関連付けを持つ 2 つのエンティティがあります。

class User extends BaseUser

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

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="text")
     */
    private $name;

    /**
     * @var string
     *
     * @ORM\Column(name="view", type="text")
     * @Assert\Choice(choices = {"work week", "week", "month", "year"}, message = "Choose a valid view.")
     */
    private $view;

    /**
     * @ManyToMany(targetEntity="AppBundle\Entity\User")
     * @JoinTable(name="calendars_publishers",
     *      joinColumns={@JoinColumn(name="calendar_id", referencedColumnName="id")},
     *      inverseJoinColumns={@JoinColumn(name="publisher_id", referencedColumnName="id", unique=true)}
     *      )
     */
    private $publishers;

    public function __construct()
    {
        $this->publishers = new \Doctrine\Common\Collections\ArrayCollection();
    }

    /**
      * Add publishers
      *
      * @param \AppBundle\Entity\User $publishers
      * @return Calendar
      */
      public function addPublisher(\AppBundle\Entity\User $publishers)
       {
          $this->publishers[] = $publishers;

           return $this;
       }

      /**
        * Remove publishers
        *
        * @param \AppBundle\Entity\User $publishers
        */
       public function removePublisher(\AppBundle\Entity\User $publishers)
     {
         $this->publishers->removeElement($publishers);
      }
}

そして、本文を使用して REST API ( http://localhost:8000/calendars ) で POST 要求を実行すると:

{
  "name": "My calendar",
  "view": "week",
  "publishers": [
    "/users/1",
    "/users/2"
  ]
}

私は応答を持っています:

{
  "@context": "/contexts/Calendar",
  "@id": "/calendars/3",
  "@type": "Calendar",
  "name": "My calendar",
  "view": "week",
  "publishers": []
}

ご覧のとおり、私のオブジェクトは適切に記録されていますが、一部のユーザーを に入れることができませんpublishers。アイデアはありますか?

私はバンドルを使用します:

  • DunglasApiバンドル
  • NelmioApiDocBundle
  • NelmioCorsバンドル
  • FOSHttpCacheBundle
  • FOSUserBundle
  • LexikJWT認証バンドル

api-platform を使用します。

4

2 に答える 2

2

addPublisher(User $publisher)およびremovePublisher(User $publisher)メソッドを追加する必要があります。

API プラットフォームは内部で Symfony PropertyAccess コンポーネントを使用しており、このコンポーネントはプライベート プロパティにアクセスできるようにするためにそのようなメソッドを必要とします。

于 2016-03-11T06:57:41.350 に答える
-1

fetch="EAGER"関連するオブジェクトを常に取得するように、リレーションシップで指定する必要があるようです。

http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/annotations-reference.html#manytoone (および次の段落) を参照してください。

ここにいくつかの良い情報があります:http://www.uvd.co.uk/blog/some-doctrine-2-best-practices/

于 2016-03-09T20:20:42.670 に答える