我有一个实体,它将大型文件作为blobs存储到DB中。
现在,我想让Symfony永远不要加载这些块,除非我通过适当的getter特别请求它们。
本质上,我想要与延迟加载关系相同的想法,但是对于字符串属性。
到目前为止,我尝试的是将保存文件元数据的所有其他属性放到一个特性中,然后将该属性应用到两个实体中。
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;
}一个实体除了特质之外什么都没有..。
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属性:
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?
发布于 2018-11-26 08:57:51
因此,根据对我的问题的评论-这样做的方式,以使迁移不会中断,是利用原则的能力,懒惰负载关系之间的表。
基本上,我必须去创建一个新的实体,它只容纳我的巨大气泡,然后在原始实体和blob实体之间建立一对一的关系。
然后,我将这种关系设置为加载懒惰,因此,现在我可以控制何时才能准确地加载巨大的数据。
我不认为这在规范DB设计方面是理想的,但它的工作效果比其他任何事情都要好得多。
https://stackoverflow.com/questions/53433135
复制相似问题