stagem / zfc-pool
主多站实体
dev-master
2019-01-09 15:06 UTC
Requires
- php: >=5.5
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
。