Оба предыдущих ответа верны, но если вы используете инструмент миграции доктрины и выполните schema:update
, это не удастся ...
Таким образом, в дополнение к маркировке сущности только для чтения и созданиючастный конструктор (поясняется в ответе Иана Филлипса):
/**
* @ORM\Entity(readOnly=true)
* @ORM\Table(name="your_view_table")
*/
class YourEntity {
private function __construct() {}
}
Вам необходимо настроить инструмент схемы на игнорирование объекта при выполнении схемы: обновление ...
Для того, чтобы сделатьчто вам просто нужно создать эту команду в вашем комплекте и установить свою сущность в списке ignoredEntity:
src / Acme / CoreBundle / Command / DoctrineUpdateCommand.php:
<?php
namespace Acme\CoreBundle\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Doctrine\ORM\Tools\SchemaTool;
class DoctrineUpdateCommand extends \Doctrine\Bundle\DoctrineBundle\Command\Proxy\UpdateSchemaDoctrineCommand {
protected $ignoredEntities = array(
'Acme\CoreBundle\Entity\EntityToIgnore'
);
protected function executeSchemaCommand(InputInterface $input, OutputInterface $output, SchemaTool $schemaTool, array $metadatas) {
/** @var $metadata \Doctrine\ORM\Mapping\ClassMetadata */
$newMetadatas = array();
foreach ($metadatas as $metadata) {
if (!in_array($metadata->getName(), $this->ignoredEntities)) {
array_push($newMetadatas, $metadata);
}
}
parent::executeSchemaCommand($input, $output, $schemaTool, $newMetadatas);
}
}
(creditАлександру Трандафиру Каталину: получено отсюда: https://stackoverflow.com/a/25948910/1442457)
Кстати, это единственный способ, который я нашел для работы с представлениями из доктрины ... Я знаю, что это обходной путь ... Если есть лучшеекак я открыт или предложения)