Доктрина 2.1, как использовать yaml - PullRequest
3 голосов
/ 02 августа 2011

Я сгенерировал файлы доктрины YAML командой:

php doctrine.php orm:convert-mapping --from-database yaml /usr/local/www/dev/vmilkov/jv-admin-2-0/library/yaml

Генерирует много файлов:

Addresses.dcm.yml
AdminMenu.dcm.yml
BlogEntryCommentData.dcm.yml
BlogType.dcm.yml
CartoonEntryGroup.dcm.yml
ChronopayTest.dcm.yml
CityLocation.dcm.yml
...
SubwayStation.dcm.yml
Telecast.dcm.yml
TemplatesTemporary.dcm.yml
TourEntryPartData.dcm.yml
...
TvTeam.dcm.yml
User.dcm.yml
UserErrorReport.dcm.yml
Users.dcm.yml

Мой код:

// Показывать все ошибки
error_reporting(E_ALL);
ini_set("display_errors", 1);


set_include_path(
          '.'
        . PATH_SEPARATOR . __DIR__ . '/../library'
        . PATH_SEPARATOR . '../application/models/'
        . PATH_SEPARATOR . '../application/classes/'
        . PATH_SEPARATOR . '../application/'
        . PATH_SEPARATOR . get_include_path()
);

$dirInfo = pathinfo($_SERVER["DOCUMENT_ROOT"]);

define('ROOT_PATH', $dirInfo['dirname']);
define('LIBRARY_PATH', ROOT_PATH . DIRECTORY_SEPARATOR . 'library');


// Подключить Доктриновский загрузчик
require 'Doctrine/Common/ClassLoader.php';


/**
 * Регистрация загрузчиков для разных namespace
 */

    /**
     * Основные классы
     */

        // Основной раздел доктрины
        $classLoader = new \Doctrine\Common\ClassLoader('Doctrine');
        $classLoader->register();

        // Раздел сущностей
        $classLoader = new \Doctrine\Common\ClassLoader('Entities');
        $classLoader -> register();

        // load the proxy entities
        $proxyClassLoader = new \Doctrine\Common\ClassLoader('Proxies', 'Models');
        $proxyClassLoader->register();




$config = new Doctrine\ORM\Configuration(); // (2)

$config -> setAutoGenerateProxyClasses("development");

    // Mapping Configuration (4)
    $driverImpl = new \Doctrine\ORM\Mapping\Driver\YamlDriver(LIBRARY_PATH . '/yaml');

$config->setMetadataDriverImpl($driverImpl);

// Proxy Configuration (3)
$config -> setProxyDir(LIBRARY_PATH . '/Proxies');
$config -> setProxyNamespace('Proxies');

    $cache = new \Doctrine\Common\Cache\ArrayCache();

$config->setMetadataCacheImpl($cache);
$config->setQueryCacheImpl($cache);






// database configuration parameters (6)
$connectionParams = array(
  'dbname' => 'test',
  'user' => 'test',
  'password' => 'test',
  'host' => '192.168.0.1',
  'driver' => 'pdo_mysql',
);


// obtaining the entity manager (7)
$evm = new Doctrine\Common\EventManager();

$entityManager = \Doctrine\ORM\EntityManager::create($connectionParams, $config, $evm);

$entityManager->getConfiguration()->setMetadataDriverImpl($driverImpl);






//echo '<hr />'; var_dump( $entityManager->getMetadataFactory()->getMetadataFor('StoreItem') ); exit;



$dql = "SELECT Perons.* FROM Person";
$query = $entityManager->createQuery($dql);




var_dump( $query->getArrayResult() );

Файл Person.dcm.yml

Person:
  type: entity
  table: person
  fields:
    id:
      id: true
      type: integer
      unsigned: false
      nullable: false
      generator:
        strategy: IDENTITY
    day:
      type: integer
      unsigned: false
      nullable: true
    month:
      type: integer
      unsigned: false
      nullable: true
    year:
      type: integer
      unsigned: false
      nullable: true
    country:
      type: string
      length: 20
      fixed: false
      nullable: true
    city:
      type: string
      length: 20
      fixed: false
      nullable: true
    address:
      type: string
      length: 200
      fixed: false
      nullable: true
    phone:
      type: string
      length: 30
      fixed: false
      nullable: true
    email:
      type: string
      length: 50
      fixed: false
      nullable: true
    icq:
      type: string
      length: 15
      fixed: false
      nullable: true
    skype:
      type: string
      length: 30
      fixed: false
      nullable: true
    site:
      type: string
      length: 30
      fixed: false
      nullable: true
    sex:
      type: boolean
      nullable: true
    about:
      type: string
      length: 3000
      fixed: false
      nullable: true
    status:
      type: string
      length: null
      fixed: false
      nullable: false
    additionalRole:
      type: string
      length: null
      fixed: false
      nullable: false
      column: additional_role
    additionalRoleTitle:
      type: string
      length: 256
      fixed: false
      nullable: true
      column: additional_role_title
    subscribeInterest:
      type: boolean
      nullable: true
      column: subscribe_interest
  manyToMany:
    encEntry:
      targetEntity: EntryEnc
      cascade: {  }
      mappedBy: author
      inversedBy: null
      joinTable: null
      orderBy: null
    resource:
      targetEntity: Resource
      cascade: {  }
      mappedBy: person
      inversedBy: null
      joinTable: null
      orderBy: null
    direction:
      targetEntity: Direction
      cascade: {  }
      mappedBy: person
      inversedBy: null
      joinTable: null
      orderBy: null
    entry:
      targetEntity: Entry
      cascade: {  }
      mappedBy: person
      inversedBy: null
      joinTable: null
      orderBy: null
    comment:
      targetEntity: Comment
      cascade: {  }
      mappedBy: person
      inversedBy: null
      joinTable: null
      orderBy: null
  oneToOne:
    personType:
      targetEntity: PersonType
      cascade: {  }
      mappedBy: null
      inversedBy: null
      joinColumns:
        person_type:
          referencedColumnName: code
      orphanRemoval: false
  lifecycleCallbacks: {  }

Я пытался поискать в Google, но ничего не нашел в использовании этих (YAML) файлов ...

Можете ли вы помочь мне найтиспособ?

  1. Что за файлы yaml иглы, это файлы метаданных?
  2. Пожалуйста, дайте мне пример использования, потому что все примеры, которые я пробовал, вызывают исключение ..

Большое спасибо!

1 Ответ

0 голосов
/ 23 ноября 2011

создать папку для сущностей, прокси и файлов сопоставления ... как это

/bin
   /Entities
   /Proxies
   /mapping
      /xml
      /yml
   cli-config.php
   ...

в cli-config.php изменить путь к драйверу для текущего

и попробуйте с этими командами

php doctrine orm:convert-mapping --from-database --namespace='Entities\' xml mapping/xml
php doctrine orm:convert-mapping --from-database --namespace='Entities\' yml mapping/yml

php doctrine orm:generate-entities --generate-annotations=1 .
php doctrine orm:generate-proxies Proxies
...