2012-09-27 100 views
1

一直試圖爲一段時間,現在做到這一點,但我似乎無法得到它的工作....學說2.2 Symfony的2.1一對多

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

當我運行教條:生成:實體命令壽, ...

它應該嗎?如果沒有,我需要做些什麼來實現這個目標?

以下是文件:

<?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; 
+0

你的模式的來源是什麼? –

+0

編輯的模式文件/模式源 –

+0

中的關係聲明看起來有點不妥。值得注意的是我們做的教條:映射:導入之前,然後編輯註釋等,然後運行doctrine:generate:entities – Ascherer

回答

1

對不起,我遲到了!

所以如果你從你的數據庫中生成你的實體,你將擁有你的php實體(通常在Entity \文件夾中),而且在默認情況下在Resources/config/doctrine中創建的xml/yml/php中的「映射文件」 ...

所以,如果你想使一個「假」關係工作,你必須在你的orm文件和你的php實體中聲明它。

很高興幫助你!

+0

感謝您的幫助! :) – Ascherer

2

你試過驗證你的實體嗎?

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

希望這有助於 安東尼

+0

無效:/,沒有在那裏 – Ascherer