mapado/doctrine-blender

此包已被放弃,不再维护。没有建议的替代包。

负责“混合”doctrine实体(ORM、ODM等)的包

v0.6.0 2014-10-13 09:11 UTC

This package is auto-updated.

Last update: 2023-09-15 20:33:52 UTC


README

Build Status

此包使得混合 doctrine 实体(ORM、ODM等)变得非常简单。

它深受Doctrine MongoDB ODM 文档中关于此主题的启发。

当前状态

它应该与每个 doctrine 包兼容。它已经与 Doctrine ORM 和 Doctrine MongoDB 进行了测试。

它还与mapado/elastica-query-bundle在 ElasticSearch => Doctrine 方向上协同工作。

安装

composer require "mapado/doctrine-blender:0.*"

用法

混合 ORM 实体和 ODM 文档

use Mapado\DoctrineBlender\ObjectBlender;
use Mapado\DoctrineBlender\ExternalAssociation;

$documentManager = ... // get a document manager
$entityManager = ... // get an entity manager

$eventSubscriber = new ObjectBlender;
$eventSubscriber->mapExternalAssociation(
    new ExternalAssociation(
        $entityManager,
        'Acme\Entity\Order',
        'product',
        $documentManager,
        'Acme\Document\Product',
        'getProductId', // optional, auto-generated with the property name
        'setProduct' // optional, auto-generated with the property name
    )
);

混合位于不同实体管理器中的 ORM 实体

混合 ORM 实体也非常简单

use Mapado\DoctrineBlender\ObjectBlender;
use Mapado\DoctrineBlender\ExternalAssociation;

$entityManager = ... // get an entity manager
$secondEntityManager = ... // get the second manager

$eventSubscriber = new ObjectBlender;
$eventSubscriber->mapExternalAssociation(
    new ExternalAssociation(
        $entityManager,
        'Acme\Entity\Order',
        'product',
        $secondEntityManager,
        'Acme\Document\Product'
    )
);

配置

Yaml

doctrine_external_association:
    client_address:         # this key is only for you
        source_object_manager_alias: product_em # an alias you will need to inject later
        classname: 'Entity\Product'
        property_name: 'product'
        reference_object_manager_alias: order_dm # another alia
        reference_class: 'Document\Order'
        reference_getter: 'getProductId'
        reference_setter: 'setProduct'
use Mapado\DoctrineBlender\Configuration\YamlConfiguration;

$ymlConf = new YamlConfiguration('/path/to/external_association.yml');

$entityManager = ... // get an entity manager
$documentManager = ... // get a document manager

$ymlConf->setObjectManagerReference('product_em', $entityManager)
    ->setObjectManagerReference('order_dm', $documentManager)
;