在Laravel中应用存储库模式的最大问题是,Eloquent模型具有许多功能,并且让这些功能到达应用层将使我们无法控制域服务层。
我找到的解决方案是创建功耗更低的新模型,类似于POPO(普通的旧php对象)。到目前为止,一切进展顺利。我创建了返回Eloquent Models的查询,当我需要将数据传递给应用程序服务层时,中间人充当了将Eloquent模型转换为POPO模型的解析器。
现在我遇到的问题是概念冲突。我们来看看这个例子。
我有以下结构:
安排:
息率:
基于此结构,在进行以下查询时:
Coupon::select(['plans.name as plan_name', 'plans.amount as plan_amount', 'coupons.*'])->leftJoin('plans', 'plans.id', '=', 'coupons.plan_id')->get();
优惠券和计划值将在同一查询中返回。
现在事情变得有趣了。如上所述,我使用的是与Eloquent Model不同的新模型,在某些情况下我需要这些模型来进行关联。
我的问题是:如何在这些模型之间建立这种关系,以便在某些时候POPO模型优惠券有计划信息,根据数据库中的查询?我需要以某种方式确定优惠券查询具有计划信息以创建对象之间的关系(通过组合,聚合或任何其他方式)。