簡體   English   中英

學說2.2 Symfony 2.1一對多

[英]Doctrine 2.2 Symfony 2.1 One to Many

一直嘗試這樣做一段時間,但我似乎無法讓它工作....

基本上,我們有一個頁面,有多個內容。 我試圖得到它,所以當生成實體時,我們將能夠做類似$page->getContents()事情

當我運行doctrine:generate:entities命令時,它會跳過contents屬性並且不會為它創建一個getter或setter ....

這應該是嗎? 如果沒有,我需要做些什么來使這個工作?

這是文件:

<?php

namespace Foo\BarBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Foo\BarBundle\Entity\Page
 *
 * @ORM\Table(name="page")
 * @ORM\Entity
 */
class Page
{
    /**
     * @var integer $pageId
     *
     * @ORM\Column(name="page_id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    public $pageId;

    .......

    /**
     * @var \Foo\BarBundle\Entity\Content 
    *
     * @ORM\OneToMany(targetEntity="Content", mappedBy="page", cascade={"all"})
     */
    public $contents;
}

內容

<?php

namespace Foo\BarBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Foo\BarBundle\Entity\Content
 *
 * @ORM\Table(name="content")
 * @ORM\Entity
 */
class Content
{
        /**
         * @var integer $contentId
         *
         * @ORM\Column(name="content_id", type="integer", nullable=false)
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="IDENTITY")
         */
        public $contentId;

        .........

        /**
         * @var Page
         *
         * @ORM\ManyToOne(targetEntity="Page", inversedBy="contents")
         * @ORM\JoinColumns({
         *   @ORM\JoinColumn(name="page_id", referencedColumnName="page_id")
         * })
         */
        public $page;
}

架構

(取出不重要的欄目)

CREATE TABLE `page` (
  `page_id` int(32) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`page_id`),
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=latin1;

CREATE TABLE `content` (
  `content_id` int(32) unsigned NOT NULL AUTO_INCREMENT,
  `page_id` int(32) unsigned NOT NULL,
  PRIMARY KEY (`content_id`),
  KEY `page_id` (`page_id`),
  CONSTRAINT `content_ibfk_1` FOREIGN KEY (`page_id`) REFERENCES `page` (`page_id`),
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=latin1;

你試過驗證你的實體嗎?

    $em = $this->getDoctrine()->getEntityManager();
    $validator = new SchemaValidator($em);
    $errors = $validator->validateMapping();

希望這有助於安東尼諾

對不起,我來晚了 !

因此,如果您從數據庫生成實體,您將擁有您的php實體(通常在Entity \\文件夾中),還有xml / yml / php中的“映射文件”,默認情況下在Resources / config / doctrine中創建....

因此,如果你想制作一個“假”關系,你必須在你的orm文件和你的php實體中聲明它。

很高興它幫助了你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM