【问题标题】:laravel query builder without raw?没有原始的laravel查询构建器?
【发布时间】:2020-09-25 11:15:22
【问题描述】:

我对此代码有疑问

return $query
                ->select([
                    'lineofpro AS pabrik_line',
                    'date AS tanggal',
                    DB::raw('ROUND((100*(COUNT( CASE WHEN `tabTravel Card`.qcresu = "Pass" THEN 1 ELSE NULL END ))/count(`tabTravel Card`.lineofpro))) AS lar_percentage'),
                    DB::raw("ROUND( IFNULL(SUM(`tabTravel Card`.finga),0) / ( count(`tabTravel Card`.lineofpro) * 200) * 1000000) AS finger_a"),
                    DB::raw("ROUND( IFNULL(SUM(`tabTravel Card`.fingb),0) / ( count(`tabTravel Card`.lineofpro) * 200) * 1000000) AS finger_b"),
                    DB::raw("ROUND( IFNULL(SUM(`tabTravel Card`.fingc),0) / ( count(`tabTravel Card`.lineofpro) * 200) * 1000000) AS finger_c"),
                    DB::raw("ROUND( IFNULL(SUM(`tabTravel Card`.fingd),0) / ( count(`tabTravel Card`.lineofpro) * 200) * 1000000) AS finger_d"),
                    DB::raw("ROUND( IFNULL(SUM(`tabTravel Card`.finge),0) / ( count(`tabTravel Card`.lineofpro) * 200) * 1000000) AS finger_e"),
                    DB::raw("ROUND( IFNULL(SUM(`tabTravel Card`.crotchf),0) / ( count(`tabTravel Card`.lineofpro) * 200) * 1000000) AS crotch_f"),
                    DB::raw("ROUND( IFNULL(SUM(`tabTravel Card`.crotchg),0) / ( count(`tabTravel Card`.lineofpro) * 200) * 1000000) AS crotch_g"),
                    DB::raw("ROUND( IFNULL(SUM(`tabTravel Card`.crotchh),0) / ( count(`tabTravel Card`.lineofpro) * 200) * 1000000) AS crotch_h"),
                    DB::raw("ROUND( IFNULL(SUM(`tabTravel Card`.crotchi),0) / ( count(`tabTravel Card`.lineofpro) * 200) * 1000000) AS crotch_i"),
                    DB::raw("ROUND( IFNULL(SUM(`tabTravel Card`.palmj),0) / ( count(`tabTravel Card`.lineofpro) * 200) * 1000000) AS palm_j"),
                    DB::raw("ROUND( IFNULL(SUM(`tabTravel Card`.cuffk),0) / ( count(`tabTravel Card`.lineofpro) * 200) * 1000000) AS cuff_k"),
                    DB::raw("ROUND( IFNULL(SUM(`tabTravel Card`.totalpin),0) / ( count(`tabTravel Card`.lineofpro) * 200) * 1000000) AS total_pinhole"),
                ])
                ->where([
                    ['date', '>=', $beginDate],
                    ['date', '<=', $endDate],
                    $this->generatePlanCodeFilter($plan, $line),
                ])
                ->groupBy([
                    'lineofpro',
                    'date',
                ]);

是否可以在没有 DB::raw 的情况下进行查询? 我尝试创建动态查询 但是使用数组返回带有 DB::raw 的选择值只会返回 '' 字符串

【问题讨论】:

    标签: laravel builder


    【解决方案1】:

    您可以将您的字段定义为访问器并将您的计算逻辑移到那里。

    然后您可以使用 Eloquent 构建查询。

    例如:

    public function getTotalPinholeAttribute()
    {
        // calculation logic here
    }
    

    您可以在此处阅读有关访问器的更多信息:https://laravel.com/docs/8.x/eloquent-mutators#defining-an-accessor

    【讨论】:

    • 我对该列进行了计算。不只是获得价值
    • 没有什么能阻止你在那里进行计算。
    • 如果您可以分享您的modelmigration,我也许也可以帮助您解决逻辑问题。
    • 没有该模型的迁移,因为我试图从其他应用程序获取数据。我试图创建一个 API,这是表 pastebin.com/mLbN3uZw 的结构。你能举出上面的函数的例子吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 2020-10-19
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 2016-02-04
    相关资源
    最近更新 更多