How can I relate entities with ManyToMany (Symfony)?












0















In the entity products I am relating my products to my productgroup:



/**
* @ORMManyToOne(targetEntity="Productgroup")
* @ORMJoinColumn(name="productgroup", referencedColumnName="id")
*/
private $productgroup;


This i working well.



So for example this is the result:



Product      Productgroup

Frog Animal
Fish Animal
Pizza Food


But sometimes my products have multiple productgroups like this:



Frog         Animal
Fish Animal, Food
Pizza Food


So I changed my entity to this:



/**
* @ORMManyToMany(targetEntity="Productgroup")
* @ORMJoinColumn(name="productgroup", referencedColumnName="id")
*/
private $productgroup;

public function getProductgroup(): ?Productgroup
{
return $this->productgroup;
}

public function setProductgroup(?Productgroup $productgroup): self
{
$this->productgroup = $productgroup;

return $this;
}


Now I get the error message:




Return value of AppEntityProducts::getProductgroup() must be an
instance of AppEntityProductgroup or null, instance of
DoctrineORMPersistentCollection returned











share|improve this question



























    0















    In the entity products I am relating my products to my productgroup:



    /**
    * @ORMManyToOne(targetEntity="Productgroup")
    * @ORMJoinColumn(name="productgroup", referencedColumnName="id")
    */
    private $productgroup;


    This i working well.



    So for example this is the result:



    Product      Productgroup

    Frog Animal
    Fish Animal
    Pizza Food


    But sometimes my products have multiple productgroups like this:



    Frog         Animal
    Fish Animal, Food
    Pizza Food


    So I changed my entity to this:



    /**
    * @ORMManyToMany(targetEntity="Productgroup")
    * @ORMJoinColumn(name="productgroup", referencedColumnName="id")
    */
    private $productgroup;

    public function getProductgroup(): ?Productgroup
    {
    return $this->productgroup;
    }

    public function setProductgroup(?Productgroup $productgroup): self
    {
    $this->productgroup = $productgroup;

    return $this;
    }


    Now I get the error message:




    Return value of AppEntityProducts::getProductgroup() must be an
    instance of AppEntityProductgroup or null, instance of
    DoctrineORMPersistentCollection returned











    share|improve this question

























      0












      0








      0








      In the entity products I am relating my products to my productgroup:



      /**
      * @ORMManyToOne(targetEntity="Productgroup")
      * @ORMJoinColumn(name="productgroup", referencedColumnName="id")
      */
      private $productgroup;


      This i working well.



      So for example this is the result:



      Product      Productgroup

      Frog Animal
      Fish Animal
      Pizza Food


      But sometimes my products have multiple productgroups like this:



      Frog         Animal
      Fish Animal, Food
      Pizza Food


      So I changed my entity to this:



      /**
      * @ORMManyToMany(targetEntity="Productgroup")
      * @ORMJoinColumn(name="productgroup", referencedColumnName="id")
      */
      private $productgroup;

      public function getProductgroup(): ?Productgroup
      {
      return $this->productgroup;
      }

      public function setProductgroup(?Productgroup $productgroup): self
      {
      $this->productgroup = $productgroup;

      return $this;
      }


      Now I get the error message:




      Return value of AppEntityProducts::getProductgroup() must be an
      instance of AppEntityProductgroup or null, instance of
      DoctrineORMPersistentCollection returned











      share|improve this question














      In the entity products I am relating my products to my productgroup:



      /**
      * @ORMManyToOne(targetEntity="Productgroup")
      * @ORMJoinColumn(name="productgroup", referencedColumnName="id")
      */
      private $productgroup;


      This i working well.



      So for example this is the result:



      Product      Productgroup

      Frog Animal
      Fish Animal
      Pizza Food


      But sometimes my products have multiple productgroups like this:



      Frog         Animal
      Fish Animal, Food
      Pizza Food


      So I changed my entity to this:



      /**
      * @ORMManyToMany(targetEntity="Productgroup")
      * @ORMJoinColumn(name="productgroup", referencedColumnName="id")
      */
      private $productgroup;

      public function getProductgroup(): ?Productgroup
      {
      return $this->productgroup;
      }

      public function setProductgroup(?Productgroup $productgroup): self
      {
      $this->productgroup = $productgroup;

      return $this;
      }


      Now I get the error message:




      Return value of AppEntityProducts::getProductgroup() must be an
      instance of AppEntityProductgroup or null, instance of
      DoctrineORMPersistentCollection returned








      symfony oop many-to-many entity






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Jan 2 at 16:54









      monkeylovemonkeylove

      2,54411646




      2,54411646
























          1 Answer
          1






          active

          oldest

          votes


















          1














          Inner storage for collection of related entities is PersistentCollection in your case.



          So, property productgroup is not a ProductGroup entity. It is collection of ProductGroup entities. For simplicity you can consider it like "array of items".



          According to said above, your getProductgroup does not return instance of ProductGroup, it returns collection of ProductGroups, that's why this method should be rewritten as:



          // no typehint here
          // Of course you can use `PersistentCollection` typehint, it is your choice
          // main point that returned value is NOT a `ProductGroup` instance
          public function getProductgroup()
          {
          return $this->productgroup;
          }


          Second, as property productgroup is not a ProductGroup, your setProductgroup method should be rewritten too:



          // I omit typehint as you pass not instance of `Productgroup`, but `collection`
          public function setProductgroup($productgroup): self
          {
          $this->productgroup = $productgroup;

          return $this;
          }


          Usually, to add one instance of Productgroup to collection, there should be an adder method:



          // here, you can typehint argument, because it is useless 
          // to pass anything else except `Productgroup` instance
          public function addProductgroup(Productgroup $productgroup): self
          {
          $this->productgroup = $productgroup;

          return $this;
          }


          Also, it is a good point to init $this->productgroup as empty collection in constructor:



          public function __construct()
          {
          $this->productgroup = new ArrayCollection();
          }


          Some other info about PersistentCollection and ArrayCollection.






          share|improve this answer
























          • Thank you, I tested your suggestion. I do not have an error message anymore. But I do not see in the mySQL database where they are actually connected.

            – monkeylove
            Jan 3 at 8:36






          • 1





            If it is ManyToMany relation there should be a so called pivot table product_product_group or similar. Of course if you updated db schema or created a migration using changes in your models.

            – u_mulder
            Jan 3 at 8:40











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54010208%2fhow-can-i-relate-entities-with-manytomany-symfony%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          1














          Inner storage for collection of related entities is PersistentCollection in your case.



          So, property productgroup is not a ProductGroup entity. It is collection of ProductGroup entities. For simplicity you can consider it like "array of items".



          According to said above, your getProductgroup does not return instance of ProductGroup, it returns collection of ProductGroups, that's why this method should be rewritten as:



          // no typehint here
          // Of course you can use `PersistentCollection` typehint, it is your choice
          // main point that returned value is NOT a `ProductGroup` instance
          public function getProductgroup()
          {
          return $this->productgroup;
          }


          Second, as property productgroup is not a ProductGroup, your setProductgroup method should be rewritten too:



          // I omit typehint as you pass not instance of `Productgroup`, but `collection`
          public function setProductgroup($productgroup): self
          {
          $this->productgroup = $productgroup;

          return $this;
          }


          Usually, to add one instance of Productgroup to collection, there should be an adder method:



          // here, you can typehint argument, because it is useless 
          // to pass anything else except `Productgroup` instance
          public function addProductgroup(Productgroup $productgroup): self
          {
          $this->productgroup = $productgroup;

          return $this;
          }


          Also, it is a good point to init $this->productgroup as empty collection in constructor:



          public function __construct()
          {
          $this->productgroup = new ArrayCollection();
          }


          Some other info about PersistentCollection and ArrayCollection.






          share|improve this answer
























          • Thank you, I tested your suggestion. I do not have an error message anymore. But I do not see in the mySQL database where they are actually connected.

            – monkeylove
            Jan 3 at 8:36






          • 1





            If it is ManyToMany relation there should be a so called pivot table product_product_group or similar. Of course if you updated db schema or created a migration using changes in your models.

            – u_mulder
            Jan 3 at 8:40
















          1














          Inner storage for collection of related entities is PersistentCollection in your case.



          So, property productgroup is not a ProductGroup entity. It is collection of ProductGroup entities. For simplicity you can consider it like "array of items".



          According to said above, your getProductgroup does not return instance of ProductGroup, it returns collection of ProductGroups, that's why this method should be rewritten as:



          // no typehint here
          // Of course you can use `PersistentCollection` typehint, it is your choice
          // main point that returned value is NOT a `ProductGroup` instance
          public function getProductgroup()
          {
          return $this->productgroup;
          }


          Second, as property productgroup is not a ProductGroup, your setProductgroup method should be rewritten too:



          // I omit typehint as you pass not instance of `Productgroup`, but `collection`
          public function setProductgroup($productgroup): self
          {
          $this->productgroup = $productgroup;

          return $this;
          }


          Usually, to add one instance of Productgroup to collection, there should be an adder method:



          // here, you can typehint argument, because it is useless 
          // to pass anything else except `Productgroup` instance
          public function addProductgroup(Productgroup $productgroup): self
          {
          $this->productgroup = $productgroup;

          return $this;
          }


          Also, it is a good point to init $this->productgroup as empty collection in constructor:



          public function __construct()
          {
          $this->productgroup = new ArrayCollection();
          }


          Some other info about PersistentCollection and ArrayCollection.






          share|improve this answer
























          • Thank you, I tested your suggestion. I do not have an error message anymore. But I do not see in the mySQL database where they are actually connected.

            – monkeylove
            Jan 3 at 8:36






          • 1





            If it is ManyToMany relation there should be a so called pivot table product_product_group or similar. Of course if you updated db schema or created a migration using changes in your models.

            – u_mulder
            Jan 3 at 8:40














          1












          1








          1







          Inner storage for collection of related entities is PersistentCollection in your case.



          So, property productgroup is not a ProductGroup entity. It is collection of ProductGroup entities. For simplicity you can consider it like "array of items".



          According to said above, your getProductgroup does not return instance of ProductGroup, it returns collection of ProductGroups, that's why this method should be rewritten as:



          // no typehint here
          // Of course you can use `PersistentCollection` typehint, it is your choice
          // main point that returned value is NOT a `ProductGroup` instance
          public function getProductgroup()
          {
          return $this->productgroup;
          }


          Second, as property productgroup is not a ProductGroup, your setProductgroup method should be rewritten too:



          // I omit typehint as you pass not instance of `Productgroup`, but `collection`
          public function setProductgroup($productgroup): self
          {
          $this->productgroup = $productgroup;

          return $this;
          }


          Usually, to add one instance of Productgroup to collection, there should be an adder method:



          // here, you can typehint argument, because it is useless 
          // to pass anything else except `Productgroup` instance
          public function addProductgroup(Productgroup $productgroup): self
          {
          $this->productgroup = $productgroup;

          return $this;
          }


          Also, it is a good point to init $this->productgroup as empty collection in constructor:



          public function __construct()
          {
          $this->productgroup = new ArrayCollection();
          }


          Some other info about PersistentCollection and ArrayCollection.






          share|improve this answer













          Inner storage for collection of related entities is PersistentCollection in your case.



          So, property productgroup is not a ProductGroup entity. It is collection of ProductGroup entities. For simplicity you can consider it like "array of items".



          According to said above, your getProductgroup does not return instance of ProductGroup, it returns collection of ProductGroups, that's why this method should be rewritten as:



          // no typehint here
          // Of course you can use `PersistentCollection` typehint, it is your choice
          // main point that returned value is NOT a `ProductGroup` instance
          public function getProductgroup()
          {
          return $this->productgroup;
          }


          Second, as property productgroup is not a ProductGroup, your setProductgroup method should be rewritten too:



          // I omit typehint as you pass not instance of `Productgroup`, but `collection`
          public function setProductgroup($productgroup): self
          {
          $this->productgroup = $productgroup;

          return $this;
          }


          Usually, to add one instance of Productgroup to collection, there should be an adder method:



          // here, you can typehint argument, because it is useless 
          // to pass anything else except `Productgroup` instance
          public function addProductgroup(Productgroup $productgroup): self
          {
          $this->productgroup = $productgroup;

          return $this;
          }


          Also, it is a good point to init $this->productgroup as empty collection in constructor:



          public function __construct()
          {
          $this->productgroup = new ArrayCollection();
          }


          Some other info about PersistentCollection and ArrayCollection.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Jan 2 at 19:26









          u_mulderu_mulder

          37.4k53148




          37.4k53148













          • Thank you, I tested your suggestion. I do not have an error message anymore. But I do not see in the mySQL database where they are actually connected.

            – monkeylove
            Jan 3 at 8:36






          • 1





            If it is ManyToMany relation there should be a so called pivot table product_product_group or similar. Of course if you updated db schema or created a migration using changes in your models.

            – u_mulder
            Jan 3 at 8:40



















          • Thank you, I tested your suggestion. I do not have an error message anymore. But I do not see in the mySQL database where they are actually connected.

            – monkeylove
            Jan 3 at 8:36






          • 1





            If it is ManyToMany relation there should be a so called pivot table product_product_group or similar. Of course if you updated db schema or created a migration using changes in your models.

            – u_mulder
            Jan 3 at 8:40

















          Thank you, I tested your suggestion. I do not have an error message anymore. But I do not see in the mySQL database where they are actually connected.

          – monkeylove
          Jan 3 at 8:36





          Thank you, I tested your suggestion. I do not have an error message anymore. But I do not see in the mySQL database where they are actually connected.

          – monkeylove
          Jan 3 at 8:36




          1




          1





          If it is ManyToMany relation there should be a so called pivot table product_product_group or similar. Of course if you updated db schema or created a migration using changes in your models.

          – u_mulder
          Jan 3 at 8:40





          If it is ManyToMany relation there should be a so called pivot table product_product_group or similar. Of course if you updated db schema or created a migration using changes in your models.

          – u_mulder
          Jan 3 at 8:40




















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54010208%2fhow-can-i-relate-entities-with-manytomany-symfony%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          MongoDB - Not Authorized To Execute Command

          How to fix TextFormField cause rebuild widget in Flutter

          in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith