конструктор запросов laravel без raw?

#laravel #builder

#laravel #Конструктор

Вопрос:

у меня есть запрос с этим кодом

 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?
я пытаюсь создать динамический запрос
, но использование массива для возврата значения select с помощью DB::raw вернет только » строку

Ответ №1:

Вы можете определить свои поля в качестве средств доступа и перенести туда свою логику вычислений.

Затем вы можете создать запрос с помощью Eloquent.

Пример:

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

Вы можете прочитать больше о средствах доступа здесь: https://laravel.com/docs/8.x/eloquent-mutators#defining-an-accessor

Комментарии:

1. у меня есть расчет по этому столбцу. не просто получить значение

2. Ничто не мешает вам выполнять вычисления там.

3. Если вы можете поделиться своим model и migration , я тоже мог бы помочь с логикой.

4. у меня нет миграции для этой модели, потому что я пытаюсь получить данные из другого приложения. я пытаюсь создать API, это структура таблицы pastebin.com/mLbN3uZw . можете ли вы привести пример функции выше?