首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Symfony理论懒惰负载特性

Symfony理论懒惰负载特性
EN

Stack Overflow用户
提问于 2018-11-22 14:29:15
回答 1查看 2.2K关注 0票数 2

我有一个实体,它将大型文件作为blobs存储到DB中。

现在,我想让Symfony永远不要加载这些块,除非我通过适当的getter特别请求它们。

本质上,我想要与延迟加载关系相同的想法,但是对于字符串属性。

到目前为止,我尝试的是将保存文件元数据的所有其他属性放到一个特性中,然后将该属性应用到两个实体中。

代码语言:javascript
运行
复制
namespace App\Entity\Traits;

use Doctrine\ORM\Mapping as ORM;

trait DocumentMetaData
{
    /**
     * @var int|null
     *
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var \DateTime|null
     *
     * @ORM\Column(type="datetime")
     */
    private $date_uploaded;
}

一个实体除了特质之外什么都没有..。

代码语言:javascript
运行
复制
namespace App\Entity;

use App\Entity\Traits\DocumentMetaData;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Table(name="documents")
 * @ORM\Entity()
 */
class Document
{
    use DocumentMetaData;
}

...the other具有添加的blob属性:

代码语言:javascript
运行
复制
namespace App\Entity;

use App\Entity\Traits\DocumentMetaData;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Table(name="documents")
 * @ORM\Entity()
 */
class DocumentFile
{
    use DocumentMetaData;

    /**
     * @var string|null
     *
     * @ORM\Column(type="blob")
     */
    private $blob;
}

现在,如果我不希望加载blob,例如,对于文件列表,我只需使用没有blob的实体。

这种方法有点工作,但会引起问题,因为我需要将两个实体指向同一个表(请参阅类级ORM注释)。

具体来说,当运行迁移时,它会使教义变得异常:

名为“myapp.documents”的表已经存在。

这是完全合理的,我真的希望有人能给我一个更好的解决方案。

除非blob明确要求,否则我如何告诉它不要加载blob?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-26 08:57:51

因此,根据对我的问题的评论-这样做的方式,以使迁移不会中断,是利用原则的能力,懒惰负载关系之间的表。

基本上,我必须去创建一个新的实体,它只容纳我的巨大气泡,然后在原始实体和blob实体之间建立一对一的关系。

然后,我将这种关系设置为加载懒惰,因此,现在我可以控制何时才能准确地加载巨大的数据。

我不认为这在规范DB设计方面是理想的,但它的工作效果比其他任何事情都要好得多。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53433135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档