CakePHP ORM:在具有非标准关联的同一表上进行联接查询

问题描述 投票:0回答:1

我有一个非常特殊的用例,但是我找不到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。所以,我有一个...

php cakephp orm query-builder cakephp-3.x
1个回答
0
投票

如果您需要查询生成器实例,那么这里几乎有两个选项或多或少简单明了,即使用具有自定义条件的关联或手动联接。

© www.soinside.com 2019 - 2024. All rights reserved.