Понимание Doctrine 2 ОРМ и как она может и должна работать с WordPress - PullRequest
3 голосов
/ 04 октября 2011

Я хотел бы интегрировать Doctrine 2 ORM в WordPress для использования в плагинах, которые я разрабатываю. В настоящее время существует плагин, который предлагает Doctrine 1.2.3 поддержку ORM в WordPress , но не v2.

Самая большая проблема у меня заключается в том, что я не понимаю, как Doctrine 2 ORM взаимодействует с моим кодом; в частности, что мне дает их код конфигурации и куда мне идти дальше:

// 3.1.1
require dirname( __FILE__ ) . '/lib/Doctrine/ORM/Tools/Setup.php';
$lib = dirname( __FILE__ ) . '/lib';
Doctrine\ORM\Tools\Setup::registerAutoloadDirectory($lib);

// 3.1.2
use Doctrine\ORM\EntityManager,
    Doctrine\ORM\Configuration;

if($applicationMode == "development") {
    $cache = new \Doctrine\Common\Cache\ArrayCache;
} else {
    $cache = new \Doctrine\Common\Cache\ApcCache;
}

$config = new Configuration;
$config->setMetadataCacheImpl($cache);
$driverImpl = $config->newDefaultAnnotationDriver('/path/to/lib/MyProject/Entities');
$config->setMetadataDriverImpl($driverImpl);
$config->setQueryCacheImpl($cache);
$config->setProxyDir('/path/to/myproject/lib/MyProject/Proxies');
$config->setProxyNamespace('MyProject\Proxies');

if ($applicationMode == "development") {
    $config->setAutoGenerateProxyClasses(true);
} else {
    $config->setAutoGenerateProxyClasses(false);
}

$connectionOptions = array(
    'driver' => 'pdo_sqlite',
    'path' => 'database.sqlite'
);

$em = EntityManager::create($connectionOptions, $config);

Я продолжал читать разделы документации до раздела 8, и у меня есть некоторое понимание. Мои вопросы:

  1. Достаточно ли этой конфигурации, чтобы я мог работать с Doctrine 2 ORM в моих плагинах?

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

  3. Является ли EntityManager глобальной переменной, которую я могу использовать в своих сущностях?

  4. Я предполагаю, что мне нужно связать все вместе, @Entity в файле недостаточно для Доктрины, чтобы знать, где находится сущность. Есть ли где-нибудь в документации, что это определяет?

Если кто-нибудь может дать краткое изложение того, как все это работает вместе: конфигурация, объекты и т. Д., Или предоставить какие-либо четкие учебники, которые уже могут быть там, я был бы очень благодарен.

1 Ответ

3 голосов
/ 14 февраля 2014

ИМХО, вы не должны использовать Doctrine2 с WP

  1. Doctrine 2 является более подходящим решением для сайтов с огромной бизнес-логикой, и я считаю, что вы не используете WP для этих целей

  2. Doctrine 2 имеет огромную кодовую базу (~ 11 МБ), которая добавляет накладные расходы для загрузки классов и обработки запросов

  3. Doctrine 2 использует много памяти с режимом гидратации по умолчанию (объект)

  4. Создание пользовательских sql намного сложнее с Doctrine.

...