Вопрос по php, symfony, doctrine-orm, doctrine – doctrine2: в двусторонних отношениях один-ко-многим, как спасти с обратной стороны?
У меня двунаправленные отношения «один ко многим» ниже.
После генерации грубых действий с задачей symfony2, когда я пытаюсь сохранить продукты, связанные с категорией, в новой / редактируемой форме категории, продукты не сохраняются ...
namespace Prueba\FrontendBundle\Entity;
use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity
* @ORM\Table(name="category")
*/
class Category
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="Product", mappedBy="category")
*/
protected $products;
/**
* @ORM\Column(name="name")
*/
protected $name;
public function __construct()
{
$this->products = new ArrayCollection();
}
public function getId()
{
return $this->id;
}
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
public function __toString()
{
return $this->name;
}
public function getProducts()
{
return $this->products;
}
public function setProducts($products)
{
die("fasdf"); //here is not entering
$this->products[] = $products;
}
public function addProduct($product)
{
die("rwerwe"); //here is not entering
$this->products[] = $product;
}
}
namespace Prueba\FrontendBundle\Entity;
use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity
* @ORM\Table(name="product")
*/
class Product
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Category", inversedBy="products")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id")
*/
protected $category;
/**
* @ORM\Column(type="string", length=100)
*/
protected $name;
public function getId()
{
return $this->id;
}
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
public function getCategory()
{
return $this->category;
}
public function setCategory($category)
{
$this->category = $category;
}
public function __toString()
{
return $this->name;
}
}
2
ответа
В качестве двунаправленной связи вам необходимо обновить связь с обеих сторон.
Добавьте эту функцию в объект категории (вы можете назвать ее addChild, если хотите):
public function addProduct($product)
{
$this->children->add($product);
}
А затем обновите обе ассоциации одновременно:
public function setProductCategory($product_category)
{
$this->productCategory = $product_category;
$product_category->addProduct($this);
}
Совет: не используйте $ children / $ parent для описания сущностей. Назовите это как $ category / $ product, у вас возникнут проблемы, когда вы захотите добавить другого «родителя». отношения.
Error: User Rate Limit Exceeded
ziiweb