magento2 entity manager

1、EntityManager是一个框架,包含实体持久层的功 

       1) Magento\Framework\EntityManager\EntityManager类在Magento 2.1中引入,用于加载、保存、检查是否存在以及删除EAV和平面对象。能。

      2)EntityManager是一种保存/加载平面表和EAV实体的新方法。

2、EntityManager 用于以下实体

catalog rule
product
category
cms block
cms page
sales rule
bundle option
bundle selection
gift card amount
and some others (staging etc.)

3、在di.xml中定义相关的操作

      1)、Declare Repository:

 <type name="Magento\Framework\Model\Entity\RepositoryFactory">
        <arguments>
            <argument name="entities" xsi:type="array">
                <item name="Magento\Cms\Api\Data\PageInterface" xsi:type="string">Magento\Cms\Api\PageRepositoryInterface</item>
                <item name="Magento\Cms\Api\Data\BlockInterface" xsi:type="string">Magento\Cms\Api\BlockRepositoryInterface</item>
            </argument>
        </arguments>
    </type>

      使用:$this->repositoryFactory->create($entityType)

     2)、Metadata Pool:

<type name="Magento\Framework\EntityManager\MetadataPool">
        <arguments>
            <argument name="metadata" xsi:type="array">
                <item name="Magento\Cms\Api\Data\PageInterface" xsi:type="array">
                    <item name="entityTableName" xsi:type="string">cms_page</item>
                    <item name="identifierField" xsi:type="string">page_id</item>
                </item>
                <item name="Magento\Cms\Api\Data\BlockInterface" xsi:type="array">
                    <item name="entityTableName" xsi:type="string">cms_block</item>
                    <item name="identifierField" xsi:type="string">block_id</item>
                </item>
            </argument>
        </arguments>
    </type>

        属性包括:connectionName、eavEntityType、entityContext、entityTableName 、identifierField

        sequence、sequenceTable.

        相关文件: vendor/magento/framework/EntityManager/MetadataPool.php

                   vendor/magento/framework/EntityManager/EntityMetadata.php

                   vendor/magento/framework/EntityManager/Sequence/Sequence.php  

3)、Hydrator Pool:

<type name="Magento\Framework\EntityManager\HydratorPool">
        <arguments>
            <argument name="hydrators" xsi:type="array">
                <item name="Magento\Cms\Api\Data\PageInterface" xsi:type="string">Magento\Framework\EntityManager\AbstractModelHydrator</item>
                <item name="Magento\Cms\Api\Data\BlockInterface" xsi:type="string">Magento\Framework\EntityManager\AbstractModelHydrator</item>
            </argument>
        </arguments>
    </type>

        相关文件:

                接口:vendor/magento/framework/EntityManager/HydratorInterface.php

                 AbstractModel:vendor/magento/framework/EntityManager/AbstractModelHydrator.php

                未定义使用:vendor/magento/framework/EntityManager/Hydrator.php

4)、Operation Pool:

<type name="Magento\Framework\EntityManager\OperationPool">
        <arguments>
            <argument name="operations" xsi:type="array">
                //自定义
                <item name="Magento\Cms\Api\Data\BlockInterface" xsi:type="array">
					//常用
                    <item name="create" xsi:type="string">Magento\Staging\Model\Operation\Create</item>
                    <item name="update" xsi:type="string">Magento\Staging\Model\Operation\Update</item>
                    <item name="delete" xsi:type="string">Magento\Staging\Model\Operation\Delete</item>
					//额外
                </item>
				
				//default
                <item name="default" xsi:type="array">
                    <item name="read" xsi:type="string">Magento\Framework\EntityManager\Operation\Read</item>
                    <item name="create" xsi:type="string">Magento\Framework\EntityManager\Operation\Create</item>
                    <item name="update" xsi:type="string">Magento\Framework\EntityManager\Operation\Update</item>
                    <item name="delete" xsi:type="string">Magento\Framework\EntityManager\Operation\Delete</item>
                    <item name="checkIfExists" xsi:type="string">Magento\Framework\EntityManager\Operation\CheckIfExists</item>
                </item>

            </argument>
        </arguments>
    </type>

create:

    接口:vendor/magento/framework/EntityManager/Operation/CreateInterface.php
    实现:vendor/magento/framework/EntityManager/Operation/Create.php

   主要实现:

             vendor/magento/framework/EntityManager/Operation/Create/CreateMain.php
             vendor/magento/framework/EntityManager/Operation/Create/CreateAttributes.php
             vendor/magento/framework/EntityManager/Operation/Create/CreateExtensions.php

    最终实现:vendor/magento/framework/EntityManager/Db/CreateRow.php

update:

        接口:vendor/magento/framework/EntityManager/Operation/UpdateInterface.php
        实现:   vendor/magento/framework/EntityManager/Operation/Update.php

        主要实现:

                vendor/magento/framework/EntityManager/Operation/Update/UpdateMain.php
                vendor/magento/framework/EntityManager/Operation/Update/UpdateAttributes.php
                vendor/magento/framework/EntityManager/Operation/Update/UpdateExtensions.php

      最终实现:vendor/magento/framework/EntityManager/Db/UpdateRow.php

read:

        接口: vendor/magento/framework/EntityManager/Operation/ReadInterface.php
        实现: vendor/magento/framework/EntityManager/Operation/Read.php

       主要实现:

               vendor/magento/framework/EntityManager/Operation/Read/ReadMain.php
               vendor/magento/framework/EntityManager/Operation/Read/ReadAttributes.php
               vendor/magento/framework/EntityManager/Operation/Read/ReadExtensions.php

     最终实现:vendor/magento/framework/EntityManager/Db/ReadRow.php

delete:

        接口:vendor/magento/framework/EntityManager/Operation/DeleteInterface.php
        实现:vendor/magento/framework/EntityManager/Operation/Delete.php

       主要实现:

              vendor/magento/framework/EntityManager/Operation/Delete/DeleteExtensions.php
              vendor/magento/framework/EntityManager/Operation/Delete/DeleteAttributes.php
              vendor/magento/framework/EntityManager/Operation/Delete/DeleteMain.php

       最终实现: vendor/magento/framework/EntityManager/Db/DeleteRow.php

5)、 Attribute Pool:

<type name="Magento\Framework\EntityManager\Operation\AttributePool">
        <arguments>
            <argument name="extensionActions" xsi:type="array">
                <item name="eav" xsi:type="array">
                    <item name="default" xsi:type="array">
                        <item name="read" xsi:type="string">Magento\Eav\Model\ResourceModel\ReadHandler</item>
                        <item name="create" xsi:type="string">Magento\Eav\Model\ResourceModel\CreateHandler</item>
                        <item name="update" xsi:type="string">Magento\Eav\Model\ResourceModel\UpdateHandler</item>
                    </item>
					 <item name="Magento\Catalog\Api\Data\CategoryInterface" xsi:type="array">
                        <item name="create" xsi:type="string">Magento\Catalog\Model\ResourceModel\CreateHandler</item>
                        <item name="update" xsi:type="string">Magento\Catalog\Model\ResourceModel\UpdateHandler</item>
                    </item>
                </item>
				 <item name="catalogRule" xsi:type="array">
                    <item name="Magento\CatalogRule\Api\Data\RuleInterface" xsi:type="array">
                        <item name="read" xsi:type="string">Magento\CatalogRule\Model\ResourceModel\ReadHandler</item>
                        <item name="create" xsi:type="string">Magento\CatalogRule\Model\ResourceModel\SaveHandler</item>
                        <item name="update" xsi:type="string">Magento\CatalogRule\Model\ResourceModel\SaveHandler</item>
                    </item>
                </item>
            </argument>
        </arguments>
    </type>

        主要文件: vendor/magento/framework/EntityManager/Operation/AttributePool.php

         action 实现接口: vendor/magento/framework/EntityManager/Operation/AttributeInterface.php

6)、Extension Pool:

<type name="Magento\Framework\EntityManager\Operation\ExtensionPool">
        <arguments>
            <argument name="extensionActions" xsi:type="array">
                <item name="Magento\Catalog\Api\Data\ProductInterface" xsi:type="array">
                    <item name="read" xsi:type="array">
                        <item name="optionReader" xsi:type="string">Magento\Catalog\Model\Product\Option\ReadHandler</item>
                        <item name="mediaGalleryRead" xsi:type="string">Magento\Catalog\Model\Product\Gallery\ReadHandler</item>
                        <item name="categoryProductLinksRead" xsi:type="string">Magento\Catalog\Model\Category\Link\ReadHandler</item>
                        <item name="websiteReader" xsi:type="string">Magento\Catalog\Model\Product\Website\ReadHandler</item>
                    </item>
                    <item name="create" xsi:type="array">
                        <item name="custom_options" xsi:type="string">Magento\Catalog\Model\Product\Option\SaveHandler</item>
                        <item name="mediaGalleryCreate" xsi:type="string">Magento\Catalog\Model\Product\Gallery\CreateHandler</item>
                        <item name="categoryProductLinksSave" xsi:type="string">Magento\Catalog\Model\Category\Link\SaveHandler</item>
                        <item name="websitePersistor" xsi:type="string">Magento\Catalog\Model\Product\Website\SaveHandler</item>
                        <item name="tierPriceCreator" xsi:type="string">Magento\Catalog\Model\Product\Attribute\Backend\TierPrice\SaveHandler</item>
                    </item>
                    <item name="update" xsi:type="array">
                        <item name="optionUpdater" xsi:type="string">Magento\Catalog\Model\Product\Option\SaveHandler</item>
                        <item name="mediaGalleryUpdate" xsi:type="string">Magento\Catalog\Model\Product\Gallery\UpdateHandler</item>
                        <item name="categoryProductLinksSave" xsi:type="string">Magento\Catalog\Model\Category\Link\SaveHandler</item>
                        <item name="websitePersistor" xsi:type="string">Magento\Catalog\Model\Product\Website\SaveHandler</item>
                        <item name="tierPriceUpdater" xsi:type="string">Magento\Catalog\Model\Product\Attribute\Backend\TierPrice\UpdateHandler</item>
                    </item>
                </item>
            </argument>
        </arguments>
    </type>

        实现文件:vendor/magento/framework/EntityManager/Operation/ExtensionPool.php
        action实现接口: vendor/magento/framework/EntityManager/Operation/ExtensionInterface.php

4、实现原理:

        1)、加载\Magento\Framework\EntityManager\EntityManager, 调用load、save(update、create)、delete 等方法.

        2)、调用Operation Pool定义的action 执行execute 方法.

        3)、operation action 主要实现里面调用metadataPool、hydratorPool、attributePool、extensionPool 等定义的操作.

        4)、最后由operation action 的最终实现action, 实现sql的操作.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值