Intereting Posts
Создание динамического списка ul li из DB PHP-пользовательский класс (логин / выход / регистрация) как отключить кнопку «Назад» в кодеригенере? Блокирование внешнего доступа к каталогу, но разрешение доступа SSI (или, как работает директива `FilesMatch`?) Есть ли какая-то особая разница между intval и casting для int – `(int) X`? Авторизовать с помощью curl и parse с помощью простого html dom не работает получение расстояния между двумя точками с помощью google gps api с php Обновление PHP в XAMPP для Linux? Ошибка скручивания при загрузке файла «не удалось создать данные форматирования» Почему у моего php-сервера нет данных json post? Поиск ближайшего списка (массив?) Города из известного местоположения Данные формы POST jQuery Функции WSDL с тем же именем. Как выбрать один? Как связать метод с новым созданным объектом? «Невозможно использовать функцию return value in write context» error в PHP

пропускать таблицы при запуске преобразования конверсии Doctrine

Я сажусь с учением в первый раз и пытаюсь использовать некоторые из его инструментов командной строки на существующем сайте / базе данных. Я играл с инструментами обратного преобразования и объектов обратной связи из командной строки и хотел посмотреть, какие файлы он будет генерировать с существующего веб-сайта в php / mysql.

Однако он останавливается на любых Исключениях. Я уже смог создать сопоставление типов для перечисления, чтобы просто выбросить их в строку, но теперь он останавливает меня на таблицах, для которых не указан первичный идентификационный ключ. Меня не интересует лекция об использовании первичных ключей или составных ключей в таблицах ссылок, я просто пытаюсь генерировать некоторый результат, изучая Доктрину на данный момент.

Есть ли способ сказать доктрине, чтобы пропустить таблицы, которые бросают исключения или баррель, не останавливаясь, когда они ударяют их? Я просто хочу получить некоторую пробную версию на данный момент и не хочу полностью перегруппировать сложную базу данных, чтобы увидеть, что может сделать Doctrine.

SW

Related of "пропускать таблицы при запуске преобразования конверсии Doctrine"

Некоторое время назад я столкнулся с такой же проблемой. Точно в том же порядке. Сначала мне пришлось сопоставить перечисление с строкой, а затем он жаловался на отсутствующие первичные ключи.

Я совершенно уверен, что исключить исключения можно. Или, по крайней мере, я не мог найти его ни в документах, ни в Интернете. Так что я сделал, это добавить первичный ключ для всех таблиц, у которых его нет. Как и таблица alter add temp_id int первичный ключ не null auto_increment;

И затем я начал оттуда, чтобы посмотреть, какие объекты сохранить, а какие – отказаться. В противном случае вы можете сделать копию db и отбросить таблицы без первичного ключа. Но если в db есть много таблиц, это может занять некоторое время вручную, и вы должны изучить процедуру

Повторное повторение этой же проблемы. Я обнаружил, что, похоже, это работает с фильтрацией в конфигурации cli через файл начальной загрузки:

// bootstrap.php require_once("vendor/autoload.php"); use Doctrine\ORM\Tools\Setup; use Doctrine\ORM\EntityManager; $site_root = realpath(__DIR__ . "/../"); $paths = [ $site_root . "/libraries/Doctrine/Entities" ]; $isDevMode = false; // used when building entities from database using command line tool $config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode); $filter_include = [ 'some_table_name', 'another_table_name', '.*some_sub_portion.*', '^some_table_prefix_.*', '.*some_table_suffix$' ]; $include_reg = '/^(' . implode('|', $filter_include) . ').*$/'; $filter_exclude = [ // tables with no primary key generate exceptions 'some_table_name', 'another_table_name', '.*some_sub_portion.*', '^some_table_prefix_.*', '.*some_table_suffix$' ]; $exclude_reg = '/^(?!(?:' . implode('|', $filter_exclude) . ')$).*$/'; // use include list //$config->setFilterSchemaAssetsExpression($include_reg); // use exclude list $config->setFilterSchemaAssetsExpression($exclude_reg); // the connection configuration $dbParams = array( 'driver' => 'pdo_mysql', 'user' => 'myuser', 'password' => 'mypassword', 'dbname' => 'mydatabase', ); $entityManager = EntityManager::create($dbParams, $config); $platform = $entityManager->getConnection()->getDatabasePlatform(); $platform->registerDoctrineTypeMapping('enum', 'string'); 

Основная проблема с преобразованием и проверкой Doctrine заключается в том, что он по умолчанию считывает всю базу данных и все таблицы независимо от сущностей или сопоставлений для них существующих или нет. Даже при использовании --filter="" при вызове orm:convert:mapping или orm:generate:entities

Чтобы обойти эту проблему и получить Doctrine skip tables, которые генерируют исключения, вы можете установить Doctrine только для чтения таблиц, которые вы хотите, определив их с помощью setFilterSchemaAssetsExpression

 $isDev = true; $config = \Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration(array('/path/to/entities'), $isDev); $config->setFilterSchemaAssetsExpression('/^(table1|table2|prefixed_.*|.*_suffixed)$/'); $em = \Doctrine\ORM\EntityManager::create(array( 'driver' => 'db_driver', 'host' => 'localhost', 'user' => 'user_name', 'password' => 'user_password', 'dbname' => 'database', ), $config); 

ИЛИ вы можете установить фильтр для подключения существующего менеджера сущностей.

 $em->getConnection()->setFilterSchemaAssetsExpression('/^(filtered_table)$/'); 

Ссылка: http://doctrine-orm.readthedocs.org/ru/latest/reference/configuration.html

Конечно, это не означает, что доктрина игнорирует исключения, но должна помочь вам начать изучение существующего приложения на некоторых конкретных таблицах, а не на всей базе данных.


Поскольку вы отметили, что у вас есть таблицы ссылок. Если у вас есть внешние ключи в таблицах, которые вы не включаете в фильтр, преобразование -from-database все равно будет создавать ссылку для него. Вам придется вручную изменить отображение на его исходную форму, а не на сопоставление отображения OneToMany, ManyToOne или ManyToMany.

Сопоставление аннотаций из doctrine orm:convert:mapping --from-database annotation /path/to/entities

 /** * @ORM\Entity * @ORM\Table(name="order") */ class Order { /** * @var \Customer * @ORM\ManyToOne(targetEntity="Customer") * @ORM\JoinColumns({ * @ORM\JoinColumn(name="customer", referencedColumnName="id", nullable=true) * }) */ private customer; } 

к

 /** * @ORM\Entity * @ORM\Table(name="order") */ class Order { /** * @var integer * @ORM\Column(name="customer", type="integer", nullable=true) */ private customer; } 

Тогда не забудьте использовать doctrine orm:validate-schema чтобы убедиться, что сопоставления синхронизированы.