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

Php 将SQL查询转换为Laravel查询生成器,php,sql,laravel,laravel-query-builder,Php,Sql,Laravel,Laravel Query Builder,这是我的第一篇文章,我正在致力于将一个PHP纯项目转换为Laravel,客户希望报告像旧项目一样工作,报告是SQL语句,我希望将其制作/转换为Laravel查询。 注意从患者表读取的所有查询 表患者的表结构 CREATE TABLE `patient` ( `idPatient` int(11) NOT NULL, `idUser_Agent` int(11) DEFAULT NULL, `PatientFName` varchar(250) DEFAULT NULL, `Pat

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

患者的表结构

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

您可以在这里做两件事: 为SQL查询创建存储过程,或在mySQL中创建患者表的视图。
它将帮助您转换为Laravel,方便地获取整个项目的数据&它将是最快的。

您现在就不能使用
DB::raw
?然后找出这些关系是什么,然后开始使用Eloquent?你可以期望人们为你转换查询,如果你在尝试解决方案时遇到任何问题,我们都可以帮助你。对于初学者,您可以查看关于工会的laravel文档并尝试一下