2015-06-25 2 views
0

Я хочу, чтобы имена моего объекта отличались от имен таблиц базы данных (имена таблиц имеют префикс, который я не хочу в объектах. Это то, что я не могу контролировать. Это существующая большая база данных).Symfony2: Как создать объекты Doctrine с использованием файла YAML?

Например, имя таблицы будет ab_product, и мне нужно, чтобы имя объекта было просто Product, а не AbProduct.

Чтобы усложнить ситуацию, у меня есть несколько связанных таблиц с этим требованием (ab_order, ab_order_product и т. Д.).

В Symfony 1 я использовал для определения всех этих сопоставлений и отношений в файле YAML, а затем использовал одну команду для генерации всех классов сущностей.

Есть ли аналогичная команда в Symfony 2. Я не смог найти ее в "php app/console doctrine: generate" namespace.

ответ

1

Вы можете сделать это, указав ключ таблицы в вашей организации

# src/Acme/StoreBundle/Resources/config/doctrine/Product.orm.yml 
Acme\StoreBundle\Entity\Product: 
    type: entity 
    table: ab_product  <-------- This is what you are looking for 
    id: 
     id: 
      type: integer 
      generator: { strategy: AUTO } 
    fields: 
     name: 
      type: string 
      length: 100 
     price: 
      type: decimal 
      scale: 2 
     description: 
      type: text 

Вы также можете определить имя Соединить колонки следующим образом:

manyToOne: 
     order: 
      targetEntity: Order 
      inversedBy: products 
      joinColumn: 
       name: ab_order 
       referencedColumnName: id 

Вы можете найти больше здесь: http://symfony.com/fr/doc/current/book/doctrine.html

+0

Я в порядке с созданием файла YAML (или нескольких файлов, как в Doctrine 2). То, что я не смог найти, - это способ создания классов Entity (PHP) из файла YAML. – NexWarner

+0

Теперь я смущен. Если вы ищете способ сгенерировать его с помощью командной строки, я не думаю, что это возможно, однако вы можете сгенерировать класс, притворяясь, что ваша ассоциация является просто базовым атрибутом и после этого редактирует файл yaml. – 0x1gene

+0

** Я ищу способ генерации объектов с использованием командной строки **. Я смущен, почему такая функциональность не существует, потому что это общий прецедент (конечно, я могу думать о создании чего-то своего). Эта функциональность появилась в версии 1. Там я бы создал файл YAML и сохранил его как файл сопоставления. Всякий раз, когда мне нужно изменение, я сначала отредактирую файл YAML, а затем воссоздаю классы сущностей PHP. – NexWarner

1

Существует поваренная книга о том, что: How to Generate Entities from an Existing Database.

Поскольку у вас уже есть данные для сопоставления, вам просто нужно запустить doctrine:generate:entities.

+0

Я пробовал эту команду (и остальное в генерации :), прежде чем отправлять вопрос. Он пытается сгенерировать сущности для всех таблиц базы данных и терпеть неудачу, когда обнаруживает таблицы базы данных, у которых нет первичных ключей (как я уже упоминал, это БД, в которой у меня нет контроля. У нее более 400 таблиц, у некоторых нет первичных ключей ключи). doctrine: generate: объекты имеют параметр --filter, но это не позволяет фильтровать таблицы, это только для фильтрации объектов. И я не мог найти способ использовать его для моего дела (пожалуйста, поправьте меня, если я ошибаюсь). – NexWarner

+0

** обновление **. Извините, я думаю, что команда, которую я запускал, была doctrine: mapping: import, а не эта команда. Я повторю эту команду. – NexWarner

Смежные вопросы