#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 . можете ли вы привести пример функции выше?