У меня есть объект, который хранит большие файлы в виде больших двоичных объектов в БД.
Теперь я бы хотел, чтобы Symfony никогда не загружал эти большие двоичные объекты, если я специально не запрашиваю их через соответствующий метод получения.
В сущности, мне нужна та же идея, что и для отношений отложенной загрузки, но для строкового свойства.
До сих пор я пытался поместить все остальные мои свойства, которые содержат метаданные файла, в черту, а затемприменить эту черту к двум сущностям.
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;
}
... у другой есть добавленное свойство 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;
}
Теперь, если я не хочу загружать большой двоичный объект, например, для вывода списка файлов, я просто использую объект, у которого нет большого двоичного объекта.
Этот подходвроде работает, но вызывает проблемы, так как мне нужно указать обе сущности на одну и ту же таблицу (см. аннотации ORM уровня класса).
В частности, это приводит в замешательство доктрину при выполнении миграций:
Стол симя «myapp.documents» уже существует.
Это имеет смысл, и я действительно надеюсь, что кто-то может подсказать мне более удачное решение.
Как я могу сказать доктрине незагрузить BLOB-объект, если он явно не запрошен?