How can I relate entities with ManyToMany (Symfony)?
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
add a comment |
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
add a comment |
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
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
symfony oop many-to-many entity
asked Jan 2 at 16:54
monkeylovemonkeylove
2,54411646
2,54411646
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
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 ProductGroup
s, 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
.
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 calledpivot
tableproduct_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
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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 ProductGroup
s, 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
.
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 calledpivot
tableproduct_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
add a comment |
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 ProductGroup
s, 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
.
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 calledpivot
tableproduct_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
add a comment |
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 ProductGroup
s, 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
.
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 ProductGroup
s, 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
.
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 calledpivot
tableproduct_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
add a comment |
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 calledpivot
tableproduct_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
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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