将 SQL 查询转换为 Laravel 查询生成器

时间:2021-05-18 08:00:50

标签: php sql laravel laravel-query-builder

这是我的第一篇文章,我正在将一个 PHP 纯项目转换为 Laravel,客户希望报告像旧项目一样工作,报告是 SQL 语句,我想将其制作/转换成Laravel 查询。 请注意从患者表中读取的所有查询。

patient的表结构

CREATE TABLE `patient` (
  `idPatient` int(11) NOT NULL,
  `idUser_Agent` int(11) DEFAULT NULL,
  `PatientFName` varchar(250) DEFAULT NULL,
  `PatientLName` varchar(100) DEFAULT NULL,
  `PatientDOB` date DEFAULT NULL,
  `PatientGender` varchar(10) DEFAULT NULL,
  `PatientAddress` varchar(250) DEFAULT NULL,
  `PatientCity` varchar(250) DEFAULT NULL,
  `PatientState` varchar(5) DEFAULT NULL,
  `PatientZip` varchar(10) DEFAULT NULL,
  `PatientPhone` varchar(15) DEFAULT NULL,
  `PatientInsuranceName` varchar(250) DEFAULT NULL,
  `PatientInsurancePolicy` varchar(45) DEFAULT NULL,
  `PatientPhysicanFName` varchar(100) DEFAULT NULL,
  `PatientPhysicanLName` varchar(100) DEFAULT NULL,
  `PatientPhysicianAddress` varchar(250) DEFAULT NULL,
  `PatientPhysicianCity` varchar(45) DEFAULT NULL,
  `PatientPhysicianState` varchar(5) DEFAULT NULL,
  `PatientPhysicianZip` varchar(10) DEFAULT NULL,
  `PatientPhysicianPhone` varchar(20) NOT NULL,
  `PatientPhysicianFax` varchar(20) NOT NULL,
  `PatientPhysicianNPI` varchar(45) DEFAULT NULL,
  `PatientHeight` varchar(50) DEFAULT NULL,
  `PatientWeight` varchar(50) DEFAULT NULL,
  `BraceLine1` tinyint(1) DEFAULT NULL,
  `BL1From` date DEFAULT NULL,
  `BL1Type` varchar(45) DEFAULT NULL,
  `BL1Modify` varchar(45) DEFAULT NULL,
  `BL1Size` varchar(45) DEFAULT NULL,
  `BraceLine2` tinyint(1) DEFAULT NULL,
  `BL2From` date DEFAULT NULL,
  `BL2Type` varchar(45) DEFAULT NULL,
  `BL2Modify` varchar(45) DEFAULT NULL,
  `BL2Size` varchar(45) DEFAULT NULL,
  `AmountPaid` decimal(32,0) DEFAULT NULL,
  `PaidDate` date DEFAULT NULL,
  `TrackingNumber` varchar(50) DEFAULT NULL,
  `TrackingNumber2` varchar(50) DEFAULT NULL,
  `BL1Charges` decimal(32,0) DEFAULT NULL,
  `BL1Unit` int(11) DEFAULT NULL,
  `BL2Charges` decimal(32,0) DEFAULT NULL,
  `BL2Unit` int(11) DEFAULT NULL,
  `Comment` varchar(5000) DEFAULT NULL,
  `DateAdded` date DEFAULT NULL,
  `PatientDO` varchar(50) DEFAULT NULL,
  `PatientRecording` varchar(50) NOT NULL,
  `PatientRecording2` varchar(50) NOT NULL,
  `PatientRelative` varchar(50) DEFAULT NULL,
  `FormStatus` varchar(250) DEFAULT NULL,
  `AmountPaid2` decimal(32,0) DEFAULT NULL,
  `PaidDate2` date DEFAULT NULL,
  `ReturnReason` varchar(50) DEFAULT NULL,
  `ModifiedDate` date DEFAULT NULL,
  `EmailShip1` int(11) NOT NULL DEFAULT 0,
  `EmailShip2` int(11) NOT NULL DEFAULT 0,
  `FormSubStatus` varchar(250) DEFAULT NULL,
  `EmailShip1Date` date DEFAULT NULL,
  `EmailShip2Date` date DEFAULT NULL,
  `Return` tinyint(4) NOT NULL,
  `DOStatus` varchar(50) NOT NULL,
  `DOSubStatus` varchar(50) NOT NULL,
  `ShippedStatus` varchar(50) NOT NULL,
  `ShippedStatus2` varchar(50) NOT NULL,
  `BraceLine3` tinyint(4) DEFAULT NULL,
  `BL3From` date DEFAULT NULL,
  `BL3Type` varchar(45) DEFAULT NULL,
  `BL3Modify` varchar(45) DEFAULT NULL,
  `BL3Size` varchar(45) DEFAULT NULL,
  `BL3Unit` int(11) DEFAULT NULL,
  `BL3Charges` decimal(32,0) DEFAULT NULL,
  `AmountPaid3` decimal(32,0) DEFAULT NULL,
  `PaidDate3` date DEFAULT NULL,
  `EmailShip3` int(11) NOT NULL DEFAULT 0,
  `EmailShip3Date` date DEFAULT NULL,
  `ShippedStatus3` varchar(50) DEFAULT NULL,
  `PatientDO2` varchar(50) DEFAULT NULL,
  `HMO` tinyint(4) DEFAULT NULL,
  `HMOStatus` varchar(200) DEFAULT NULL,
  `PPO` tinyint(4) NOT NULL,
  `Portal` varchar(50) DEFAULT NULL,
  `EmailSchedule` int(11) NOT NULL DEFAULT 0,
  `RelativeType` varchar(50) NOT NULL,
  `BEVStatus` varchar(50) NOT NULL,
  `QAStatus` varchar(50) NOT NULL DEFAULT 'Pending',
  `id_UserAgent_QA` varchar(50) NOT NULL,
  `Catheters` tinyint(4) NOT NULL,
  `CathetersType` varchar(100) NOT NULL,
  `CathetersSize` varchar(50) NOT NULL,
  `CathetersBrand` varchar(100) NOT NULL,
  `Walker` tinyint(4) NOT NULL,
  `WalkerType` varchar(100) NOT NULL,
  `Reimbursement` tinyint(4) DEFAULT NULL,
  `R_Date` date DEFAULT NULL,
  `CheckNo` varchar(50) DEFAULT NULL,
  `R_Amount` decimal(32,0) DEFAULT NULL,
  `DrCallMade` tinyint(4) DEFAULT NULL,
  `StartDate` date DEFAULT NULL,
  `EndDate` date DEFAULT NULL,
  `PickupTrackingNumber` varchar(50) DEFAULT NULL,
  `PickupTrackingNumber2` varchar(50) DEFAULT NULL,
  `BracePickup` tinyint(4) DEFAULT NULL,
  `PickupReason` varchar(50) DEFAULT NULL,
  `PickupDate` date DEFAULT NULL,
  `FaxSent` tinyint(4) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

SQL 查询

SELECT
    SUM(pt1) AS SENT,
    SUM(pt2) AS DOBACK,
    SUM(pt2) * 100 / SUM(pt1 + pt2) AS percentage,
    DateAdded,
STATUS AS
    FormStatus
FROM
    (
        (
        SELECT
            1 AS Pt1,
            0 AS pt2,
            "SENT TO RX1" AS
        STATUS
            ,
            DateAdded
        FROM
            patient
        WHERE
            (dostatus = "Sent to RX1") AND(portal = "NationalRXGA")
    )
UNION ALL
    (
    SELECT
        0 AS p1,
        1 AS PatientNumbers2,
        "SENT TO RX1" AS
    STATUS
        ,
        DateAdded
    FROM
        patient
    WHERE
        (dosubstatus = "DO BACK") AND(portal = "NationalRXGA")
)
UNION ALL
    (
    SELECT
        1 AS PatientNumbers1,
        0 AS patientnumber2,
        "SENT TO RX2" AS
    STATUS
        ,
        DateAdded
    FROM
        patient
    WHERE
        (dostatus = "Sent to RX2") AND(portal = "NationalRXGA")
)
UNION ALL
    (
    SELECT
        0 AS p1,
        1 AS PatientNumbers2,
        "SENT TO RX2" AS
    STATUS
        ,
        DateAdded
    FROM
        patient
    WHERE
        (dosubstatus = "DO BACK") AND(portal = "NationalRXGA")
)
    ) AS t
GROUP BY
STATUS

1 个答案:

答案 0 :(得分:0)

您可以在这里做两件事: 为您的 SQL 查询创建存储过程或在 mySQL 中创建患者表的视图。 它将帮助您轻松地转换为 Laravel,为您的整个项目获取数据,并且它会快速优化。

相关问题