教义 2.2 Symfony 2.1 一对多


已经

尝试这样做了一段时间了,但我似乎无法让它工作......

基本上,我们有一个页面,有多个内容。我试图得到它,所以当实体生成时,我们将能够做类似$page->getContents()

当我运行 doctrine:generate:entities 命令时,它会跳过 content 属性,并且不会为其创建 getter 或 setter。

是应该的吗? 如果没有,我需要做什么才能让它工作?

以下是文件:

<?php
namespace FooBarBundleEntity;
use DoctrineORMMapping as ORM;
/**
 * FooBarBundleEntityPage
 *
 * @ORMTable(name="page")
 * @ORMEntity
 */
class Page
{
    /**
     * @var integer $pageId
     *
     * @ORMColumn(name="page_id", type="integer", nullable=false)
     * @ORMId
     * @ORMGeneratedValue(strategy="IDENTITY")
     */
    public $pageId;
    .......
    /**
     * @var FooBarBundleEntityContent 
    *
     * @ORMOneToMany(targetEntity="Content", mappedBy="page", cascade={"all"})
     */
    public $contents;
}

内容

<?php
namespace FooBarBundleEntity;
use DoctrineORMMapping as ORM;
/**
 * FooBarBundleEntityContent
 *
 * @ORMTable(name="content")
 * @ORMEntity
 */
class Content
{
        /**
         * @var integer $contentId
         *
         * @ORMColumn(name="content_id", type="integer", nullable=false)
         * @ORMId
         * @ORMGeneratedValue(strategy="IDENTITY")
         */
        public $contentId;
        .........
        /**
         * @var Page
         *
         * @ORMManyToOne(targetEntity="Page", inversedBy="contents")
         * @ORMJoinColumns({
         *   @ORMJoinColumn(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;

对不起,晚了!

因此,如果您从数据库生成实体,您将拥有 php 实体(通常在 Entity\ 文件夹中),但也有一个 xml/yml/php 中的"映射文件",该文件默认在 Resources/config/doctrine 中创建。

因此,如果你想使一个"假"关系工作,你必须在你的orm文件和你的php实体中声明它。

很高兴它对你有帮助!

您是否尝试过验证您的实体?

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

希望这有帮助安东尼诺

相关内容

  • 没有找到相关文章

最新更新