我有一个非常特殊的用例,但是我找不到ORM的干净解决方案。我搜索了很多东西,也许我的数据库模型不正确,我不确定。
我使用CakePHP 3.8.11。
因此,我有一个表“ MaintenanceTypes”,其中包含3个重要字段:id,名称和周期性。周期性(以天为单位)表示“此维护将(例如)每30天进行一次。”
周期为7(周),30(月),90(孕期等)。>>
我还有一个表“ Operations”,它们是属于“ MaintenanceType”(字段是id,name,maintenance_type_id)的小单元测试。
在这种情况下的特殊之处在于,作为业务规则,周期性地为7天的MaintenanceType所属的操作被“包括”在周期性较大的every
中;这意味着每个孕期,您都应执行与孕期直接相关的每个操作,but还应执行与月,周相关的每个操作,等等。在原始SQL中,这很简单:slight_smile:
mt_ref
是参考MaintenanceType,mt_inc是包含的MaintenanceTypes(具有较小的周期性),最后,每个操作都属于找到的任何MaintenanceTypes。SELECT mt_ref.id, mt_ref.name, mt_ref.periodicity, mt_inc.name, mt_inc.periodicity, o.name FROM maintenance_types mt_ref LEFT JOIN maintenance_types mt_inc ON (mt_inc.periodicity <= mt_ref.periodicity) LEFT JOIN operations o ON (o.maintenance_type_id = mt_inc.id) WHERE mt_ref.id = 3
我已经尝试声明MaintenanceTypes之间的关联,但是我找不到一种方法来声明关联是在周期性字段上完成的,还有一点,不是在等式上,而是在“小于或等于”上。
[为了增加额外的难度,我将这个查询用于(非常好的)JQuery Datatables CakePHP插件(https://github.com/allanmcarvalho/cakephp-datatables),所以我不能简单地传递原始SQL,而必须使用ORM ...
我希望这很清楚,并且有人可以帮助我!
非常感谢!
我有一个非常特殊的用例,但是我找不到ORM的干净解决方案。我搜索了很多东西,也许我的数据库模型不正确,我不确定。我使用CakePHP 3.8.11。所以,我有一个...
如果您需要查询生成器实例,那么这里几乎有两个选项或多或少简单明了,即使用具有自定义条件的关联或手动联接。