Условная агрегация, фильтр в laravel - PullRequest
0 голосов
/ 13 февраля 2020

Это мой второй вопрос, основанный после решения Строки столбцам на основе даты / времени в Postgresql Таблица находится в верхней ссылке :)

Вот моя модель :

namespace App;

use Illuminate\Database\Eloquent\Model;

class StambMeasCanal extends Model
{
  protected $connection = 'stamb';
  protected $table = 'meas_kanal';
  protected $fillable = ['fullname','formattedvalue','recordtime','qualitydesc','statedesc','id'];
}

Часть моего контроллера:

function getdata(Request $request)
{
  $start_date = date('d-m-Y 00:00:00');
  $end_date = date('d-m-Y 23:59:59');
  if($request->start_date != '' && $request->end_date != '')
  {
    // if user fill dates
    $dateScope = array($request->start_date ." 00:00:00", $request->end_date ." 23:59:59");
  } else {
    // default load page - today
    $dateScope = array($start_date, $end_date);
  };

  $students = StambMeasCanal::whereBetween('recordtime', $dateScope)
  ->selectRaw('recordtime')
  ->selectRaw('max(formattedvalue) filter (where fullname = "Данни.Кота") as kotaiazovir')
  ->selectRaw('max(formattedvalue) filter (where fullname = "Данни.Напрежение") as naprevenieqzovir')
  ->selectRaw('max(formattedvalue) filter (where fullname = "Данни.Температура") as tempqzovir')
  ->selectRaw('max(formattedvalue) filter (where fullname = "Данни.Температура_табло") as temptabloqzovir')
  ->selectRaw('max(formattedvalue) filter (where fullname = "Данни.Ниво") as nivoqzovir')
  ->selectRaw('max(formattedvalue) filter (where fullname = "ГСК_00_600.Данни.Напрежение") as naprevenie600')
  ->selectRaw('max(formattedvalue) filter (where fullname = "ГСК_00_600.Данни.Ниво") as nivo600')
  ->selectRaw('max(formattedvalue) filter (where fullname = "ГСК_00_600.Данни.НивоУЗ") as nivouz600')
  ->selectRaw('max(formattedvalue) filter (where fullname = "ГСК_00_600.Данни.Разход") as razhod600')
  ->selectRaw('max(formattedvalue) filter (where fullname = "ГСК_00_600.Данни.Температура") as temperatura600')
  ->selectRaw('max(formattedvalue) filter (where fullname = "ГСК_09_200.Данни.Напрежение") as naprevenie200')
  ->selectRaw('max(formattedvalue) filter (where fullname = "ГСК_09_200.Данни.Ниво") as nivo200')
  ->selectRaw('max(formattedvalue) filter (where fullname = "ГСК_09_200.Данни.НивоУЗ") as nivouz200')
  ->selectRaw('max(formattedvalue) filter (where fullname = "ГСК_09_200.Данни.Разход") as razhod200')
  ->selectRaw('max(formattedvalue) filter (where fullname = "ГСК_09_200.Данни.Температура") as temperatura200')
  ->selectRaw('max(qualitydesc) as QualityDesc')
  ->selectRaw('max(qualitydesc) as StateDesc')
  ->groupBy('recordtime')
  ->orderBy('recordtime', 'ASC')
  ->get();

  return Datatables::of($meascanal)
  ->make(true);
}

После запроса у меня появляется ошибка:

message: "SQLSTATE[42703]: Undefined column: 7 ERROR:  column "Данни.Кота" does not exist↵LINE 1: ...ime, max(formattedvalue)..

Это плохая интеграция, которую я сделал в запрос laravel?

EDIT1: проблема заключалась в кавычках. Мне нужно было экранировать их:

where fullname = \'Данни.Кота\'

EDIT2:

Последние два столбца (QualityDes c и StateDes c) не привязаны ни к одному из столбцов FormattedValue и отображаются неправильно заказать ... Есть идеи как это исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...