Symfony + Sonata,OneToMany Relation

时间:2015-05-29 19:27:07

标签: symfony many-to-many one-to-many sonata

是的,有人可以帮我一把吗?

我需要使用Sonata管理包实现书籍和读者列表。

问题是我为列表中的每个读者提供了空列的阅读书籍。

Forein键可以写入DB。

请参阅代码:

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;

图书实体

    <?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as 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;
    }

    /**
     * Get 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;
    }

    /**
     * Get 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;
    }

    /**
     * Get author
     *
     * @return string 
     */
    public function getAuthor()
    {
        return $this->author;
    }
}

读者实体

    <?php

    namespace AppBundle\Entity;

    use Doctrine\ORM\Mapping as 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 as $p)
            {
                $books[] = $p->getBook();
            }

            return $books;
        }

        public function setBook($books)
        {
            foreach($books as $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 as $p)
            {
                $books[] = $p->getBook();
            }

            return $books;
        }

        public function setBook($books)
        {
            foreach($books as $p)
            {
                $po = new ReadersRelations();

                $po->setBook($p);
                $po->setReader($this);

                $this->addPo($po);
            }

        }

        public function addPo($ProductOrder)
        {
            $this->book[] = $ProductOrder;
        }
    /**
     * Get 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;
    }

    /**
     * Get name
     *
     * @return string 
     */
    public function getName()
    {
        return $this->name;
    }
}

1 个答案:

答案 0 :(得分:0)

那么,您使用您的关系对商店数据有疑问吗?或者juste获取列表中的数据?

如果是保存数据,请尝试实施Sonata type collectionSonata type model字段类型以注册新的相关条目。

然后,如果您有任何问题,我们将检查您的实体制定者是否缺少行动。

相关问题