many to many - Symfony + Sonata, OneToMany Relation -
could give me hand please?
i need implement list of books , readers using sonata admin bundle.
the problem empty column of read books each reader in list.
forein keys written okay db.
please see code:
readersadmin class
protected function configureformfields(formmapper $formmapper) { $formmapper ->add('name') ->add('book', 'entity', array( 'class' => 'appbundle:books', 'property' => 'name', 'multiple' => true, 'expanded' => true ) ); } /** * @param \sonata\adminbundle\show\showmapper $showmapper * * @return void */ protected function configureshowfield(showmapper $showmapper) { $showmapper ->add('name') ->add('book') ; } /** * @param \sonata\adminbundle\datagrid\listmapper $listmapper * * @return void */ protected function configurelistfields(listmapper $listmapper) { $listmapper ->add('name') ->add('book') ->add('_action', 'input', array( 'actions' => array( 'show' => array(), 'edit' => array(), 'delete' => array(), ) )) ; }
readersrelations entity
class readersrelations
{ /** * @var integer * * @orm\column(name="id", type="integer") * @orm\id * @orm\generatedvalue(strategy="auto") */ private $id;
/** * @var books * * @orm\manytoone(targetentity="\appbundle\entity\books", inversedby="readersrelations") * @orm\joincolumn(name="book_id", referencedcolumnname="id") */ private $book; /** * @var readers * * @orm\manytoone(targetentity="\appbundle\entity\readers", inversedby="readersrelations") * @orm\joincolumn(name="reader_id", referencedcolumnname="id") */ private $reader;
books entity
<?php namespace appbundle\entity; use doctrine\orm\mapping orm; use doctrine\common\collections\arraycollection; /** * books * * @orm\entity * @orm\table(name="books") */ class books { /** * @var integer * * @orm\column(name="id", type="integer") * @orm\id * @orm\generatedvalue(strategy="auto") * */ private $id; /** * @var string * * @orm\column(name="name", type="string", length=255) */ private $name; /** * @var string * * @orm\column(name="author", type="string", length=255) * */ private $author; /** * @var readersrelations * * @orm\onetomany(targetentity="\appbundle\entity\readersrelations" , mappedby="books" , cascade={"all"}) */ private $readers; public function __tostring() { return $this->name; } /** * id * * @return integer */ public function getid() { return $this->id; } /** * set name * * @param string $name * @return books */ public function setname($name) { $this->name = $name; return $this; } /** * name * * @return string */ public function getname() { return $this->name; } /** * set author * * @param string $author * @return books */ public function setauthor($author) { $this->author = $author; return $this; } /** * author * * @return string */ public function getauthor() { return $this->author; } }
readers entity
<?php namespace appbundle\entity; use doctrine\orm\mapping orm; use doctrine\common\collections\arraycollection; use appbundle\entity\readersrelations; /** * readers * * @orm\entity * @orm\table(name="readers") */ class readers { /** * @var integer * * @orm\column(name="id", type="integer") * @orm\id * @orm\generatedvalue(strategy="auto") * */ private $id; /** * @var string * * @orm\column(name="name", type="string", length=255) * */ private $name; /** * @var readersrelations * * @orm\onetomany(targetentity="\appbundle\entity\readersrelations" , mappedby="readers" , cascade={"all"}) */ private $book; private $books; public function __construct() { $this->book = new arraycollection(); $this->books = new arraycollection(); } public function __tostring() { return $this->name; } public function getbook() { $books = new arraycollection(); foreach($books $p) { $books[] = $p->getbook(); } return $books; } public function setbook($books) { foreach($books $p) { $po = new readersrelations(); $po->setbook($p); $po->setreader($this); $this->addpo($po); } } public function addpo($productorder) { $this->book[] = $productorder; } public function removepo($productorder) { return $this->book->removeelement($productorder); } class readers { /** * @var integer * * @orm\column(name="id", type="integer") * @orm\id * @orm\generatedvalue(strategy="auto") * */ private $id; /** * @var string * * @orm\column(name="name", type="string", length=255) * */ private $name; /** * @var readersrelations * * @orm\onetomany(targetentity="\appbundle\entity\readersrelations" , mappedby="readers" , cascade={"all"}) */ private $book; private $books; public function __construct() { $this->book = new arraycollection(); $this->books = new arraycollection(); } public function __tostring() { return $this->name; } public function getbook() { $books = new arraycollection(); foreach($books $p) { $books[] = $p->getbook(); } return $books; } public function setbook($books) { foreach($books $p) { $po = new readersrelations(); $po->setbook($p); $po->setreader($this); $this->addpo($po); } } public function addpo($productorder) { $this->book[] = $productorder; } /** * id * * @return integer */ public function getid() { return $this->id; } /** * set name * * @param string $name * @return readers */ public function setname($name) { $this->name = $name; return $this; } /** * name * * @return string */ public function getname() { return $this->name; }
}
so, have problem store data using relationship ? or juste data in list ?
if it's save data, try implement sonata type collection or sonata type model field types register new related entries.
then, if have problems, check if entities setters have missing actions.
Comments
Post a Comment