stagem/zfc-pool

主多站实体

dev-master 2019-01-09 15:06 UTC

This package is auto-updated.

Last update: 2024-09-10 05:46:07 UTC


README

信息

如今,我们经常听到“多店铺”、“市场”、“多行业”等词汇。许多现代系统都是按照“多”的原则来开发的。这意味着系统有一个平台,但由不同的用户使用,而这些用户彼此之间并不了解。

ZfcPool 是一个通用模块,它实现了多个 Strategy,可以轻松地将您的系统通过全局参数进行划分。

如果您将您的 Model 标记为 PoolAware,这将向系统发出信号,应用全局条件到所有与该 Model 相关的查询。

您不再需要将相同的条件应用到所有查询上。只需将 Model 标记为 PoolAware,所有工作将自动完成。

已注册的策略

  • ParamStrategy - 允许您在一个接口中切换不同的 Pool。例如,您在不同的亚马逊市场销售产品,在某一时刻您只想看到单个市场的详细信息。
  • DomainStrategy(尚未实现)- 允许您在一个系统中管理不同的域名。
  • UserStrategy(尚未实现)- 允许您针对当前用户应用不同的条件。

使用方法

将您的 Model 标记为 PoolAware,为此使用注解 @Stagem\ZfcPool\Model\Annotation\PoolAware(fieldName="marketplace")。您应该传递 Model 的属性名称而不是数据库中的列名称。在我们的例子中,我们在 Model 中有 marketplace 字段,在数据库中有 marketplaceId 列。

namespace Stagem\Product\Model;

use Doctrine\ORM\Mapping as ORM;
use Stagem\ZfcPool\Model\Annotation\PoolAware;
use Stagem\Amazon\Model\Marketplace;

/**
 * @PoolAware(fieldName="marketplace")
 * @ORM\Entity()
 * @ORM\Table(name="amazon_product_rank")
 */
class Rank
{
    //...
   
    /**
     * @var Marketplace
     * @ORM\ManyToOne(targetEntity="Stagem\Amazon\Model\Marketplace")
     * @ORM\JoinColumn(name="marketplaceId", referencedColumnName="id", nullable=true)
     */
    private $marketplace;
}

经过这一简单的操作后,所有针对 Rank 模型的查询都将自动添加当前市场。

注意。 Stagem\Amazon\Model\Marketplace 实现 Stagem\ZfcPool\Model\PoolInterface