doctrine2: in einer eins-zu-viele bidirektionale Beziehung, wie zu speichern, von der umgekehrten Seite?
Ich habe die Eins-zu-Viele bidirektionale Beziehung unten.
Nach dem generieren der crud-Aktionen mit symfony2 Aufgabe, wenn ich versuche zu speichern, die Produkte einer Kategorie zugeordnet, in die new/edit-Category-form, die Produkte werden auch nicht gespeichert...
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;
}
}
InformationsquelleAutor ziiweb | 2012-05-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als seine bidirektionale Sie aktualisieren die Gemeinschaft auf beiden Seiten.
Fügen Sie diese Funktion in die Kategorie Person (Sie können es nennen, addChild wenn du magst):
Und aktualisieren Sie dann beide Vereine zur gleichen Zeit:
Tipp: nicht zu verwenden, $Kinder, $parent zu beschreiben Entitäten. Nennen Sie es, wie es ist $Kategorie /$Produkt, Sie laufen in Probleme, wenn Sie hinzufügen möchten, in einem anderen "parent" - Beziehung.
Ich habe nicht fügen Sie die richtigen Klassen, wenn ich meine Frage..Jetzt ist es ok, könnte Ihnen ein Blick auf Sie wieder?
Ja dasselbe gilt, bidirektional aktualisiert werden muss an beiden enden. Kategorie::addProduct($product), fügen Sie die Zeile $product->setCategory($this); und Sie sollten eingestellt werden.
InformationsquelleAutor Lee Davis
Andere kurze Lösung :
in Ihrer Kategorie Einheit , fügen Sie die folgende Zeile zu Ihrer addProduct Funktion
InformationsquelleAutor Mohammed Yassine CHABLI