1

しばらくこれをやろうとしていますが、うまくいかないようです....

基本的に、複数のコンテンツを持つページがあります。私はそれを取得しようとしているので、エンティティが生成されると、次のようなことができるようになります$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;
4

2 に答える 2

2

エンティティを検証しようとしましたか?

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

これがアントニノに役立つことを願っています

于 2012-09-27T22:39:45.630 に答える
1

遅くなってごめんなさい!

したがって、データベースからエンティティを生成すると、php エンティティ (通常は Entity\ フォルダー) だけでなく、デフォルトで Resources/config/doctrine に作成される xml/yml/php の「マッピング ファイル」も作成されます。

したがって、「偽の」関係を機能させたい場合は、orm ファイルと php エンティティで宣言する必要があります。

お役に立ててよかったです!

于 2012-10-01T15:24:50.593 に答える