学说 - 从其他表中选择全部



我正在尝试基于基于基本的加入标准自动填充一个实体集合的子问题类似的东西。我不确定只有学说注释这是可能的,但是无论如何我都想问。

因此,我有一个称为"页面"的实体,这有点像CMS条目。这些页面可以包含与它们相关图像的可变列表。基本上它只是另一个带有page_id列的表。该表可以将任意数量的图像与同一page_id相关联,并由一种排列。该实体称为页面图。

我基本上只是一个有学说的菜鸟,@Join注释指令现在就把我的头倾斜了。

因此,加载一个页面实体,并在查询页面对象中自动填充单个属性,并具有页面图像实体数组。pageentity具有page_id字段。

我真的没有任何代码可以在这里共享,因为这是一种方法问题。但是让我们在这里看看:

实体/pag.php

/**
 * Page
 *
 * @ORMTable()
 * @ORMEntity(repositoryClass="SiteCoreBundleEntityPageRepository")
 */
class Page
{
    /**
     * @var integer
     *
     * @ORMColumn(name="id", type="integer")
     * @ORMId
     * @ORMGeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @var string
     *
     * @ORMColumn(name="page_title", type="string", length=255)
     */
    private $pageTitle;
    /**
     * @var string
     *
     * @GedmoSlug(fields={"pageTitle"})
     * @ORMColumn(name="slug", type="string", length=255)
     */
    private $slug;
    // NOT SURE WHAT TO DO HERE
    private $images;
}  

实体/pageimage.php

/**
 * PageImage
 *
 * @ORMTable()
 * @ORMEntity(repositoryClass="SiteCoreBundleEntityPageImageRepository")
 */
class PageImage
{
    /**
     * @var integer
     *
     * @ORMColumn(name="id", type="integer")
     * @ORMId
     * @ORMGeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @var string
     *
     * @ORMColumn(name="page_id", type="string", length=255)
     */
    private $page_id;
    /**
     * @var string
     *
     * @AssertFile(maxSize="6000000")
     * @ORMColumn(name="file", type="string", length=512)
     */
    private $file;
    /**
     * @var DateTime
     *
     * @ORMColumn(name="dateAdded", type="datetime")
     */
    private $dateAdded;
    /**
     * @var integer
     *
     * @ORMColumn(name="sort", type="integer")
     */
    private $sort;
}

您必须在一侧通过 page.images 在实体之间建立关系,另一侧 pageimage.page_id 在另一侧。我会以 onetomany 关系(一个 page 可以具有多个 pageImage )。检查文档。

代码:

页面实体:

/**
 * @OneToMany(targetEntity="PageImage", mappedBy="page_id")
 **/
private $images;
public function __construct() {
    $this->images = new DoctrineCommonCollectionsArrayCollection();
}

pageImage实体:

/**
 * @ManyToOne(targetEntity="Page", inversedBy="images")
 * @JoinColumn(name="page_id", referencedColumnName="id")
 **/
private $page_id;

使用这些设置,学说将处理加入,它将自动填充 page 及其 pageimage 相关的项目。

在pageimage entity

use DoctrineCommonCollectionsArrayCollection;
/**
 * PageImage
 *
 * @ORMTable()
 * @ORMEntity(repositoryClass="SiteCoreBundleEntityPageImageRepository")
 */
class PageImage
{
    /**
     * @var integer
     *
     * @ORMColumn(name="id", type="integer")
     * @ORMId
     * @ORMGeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @ORMManyToOne(targetEntity="Page", inversedBy="images")
     * @ORMJoinColumn(name="page_id", referencedColumnName="id")
     */
    private $page;
    /**
     * @var string
     *
     * @AssertFile(maxSize="6000000")
     * @ORMColumn(name="file", type="string", length=512)
     */
    private $file;
    /**
     * @var DateTime
     *
     * @ORMColumn(name="dateAdded", type="datetime")
     */
    private $dateAdded;
    /**
     * @var integer
     *
     * @ORMColumn(name="sort", type="integer")
     */
    private $sort;
}

在页面实体中,您将变量"图像"声明为arnecollection类型(用于基本数组的包装器的学说类)。获取数据时,学说将根据您的映射将哪些图像推入图像集合中。

/**
 * Page
 *
 * @ORMTable()
 * @ORMEntity(repositoryClass="SiteCoreBundleEntityPageRepository")
 */
class Page
{
    /**
     * @var integer
     *
     * @ORMColumn(name="id", type="integer")
     * @ORMId
     * @ORMGeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @var string
     *
     * @ORMColumn(name="page_title", type="string", length=255)
     */
    private $pageTitle;
    /**
     * @var string
     *
     * @GedmoSlug(fields={"pageTitle"})
     * @ORMColumn(name="slug", type="string", length=255)
     */
    private $slug;
    /**
     * @ORMOneToMany(targetEntity="PageImage", mappedBy="page")
     */
    private $images;
    public function __construct()
    {
          $this->products = new ArrayCollection();
    }
} 

相关内容

  • 没有找到相关文章

最新更新