Редактировать запись в запросе условного агрегирования - PullRequest
0 голосов
/ 23 апреля 2020

У меня проблема. Таблица (в Postgresql DB) выглядит так:

+----------+----------------+---------------------+----+
| fullname | formattedvalue | recordTime          | ID |
+----------+----------------+---------------------+----+
| text1    | 170            | 09/02/2020 21:45:00 | 1  |
+----------+----------------+---------------------+----+
| text2    | 24             | 09/02/2020 21:45:00 | 2  |
+----------+----------------+---------------------+----+
| text1    | 171            | 08/02/2020 21:30:00 | 3  |
+----------+----------------+---------------------+----+
| text2    | 25             | 08/02/2020 21:30:00 | 4  |
+----------+----------------+---------------------+----+

Это моя функция getdata:

function getdata(Request $request)
{
  $start_date = date('d/m/Y 08:00:00', strtotime("yesterday"));
  $end_date = date('d/m/Y 08:00:00');

  if($request->start_date != '' && $request->end_date != '')
  {
      // if user fill dates
      $dateScope = array($request->start_date, $request->end_date);
  } else {
      // default load page - today
      $dateScope = array($start_date, $end_date);
  };


  $students = mymodel::whereBetween('recordtime', $dateScope)
->selectRaw('recordtime')
->selectRaw('max(formattedvalue) filter (where fullname = \'Text1\') as nivo600')
->selectRaw('max(formattedvalue) filter (where fullname = \'Text2\') as razhod600')
->where(function ($query) {
  $query->where('fullname', 'like', "Text1")
        ->orWhere('fullname', 'like', "Text2");
})
->groupBy('recordtime')
->orderBy('recordtime')
->get();

return Datatables::of($students)
->addColumn('action', function($student){
  return '

  <a href="#" class="btn btn-xs btn-primary edit" id="'.$student->recordtime.'">
    <i class="glyphicon glyphicon-edit"></i>
    Редактирай
  </a>

  <a href="#" class="btn btn-xs btn-danger delete" id="'.$student->recordtime.'">
    <i class="glyphicon glyphicon-remove"></i>
     Изтрий
   </a>
   ';
})
//->addColumn('checkbox', '<input type="checkbox" name="student_checkbox[]" class="student_checkbox" value="{{$id}}" />')
->rawColumns(['checkbox','action'])
->make(true);
}

После запроса таблица преобразуется следующим образом:

+---------------------+-------+-------+
| recordtime          | text1 | text2 |
+---------------------+-------+-------+
| 09/02/2020 21:45:00 | 170   | 24    |
+---------------------+-------+-------+
| 09/02/2020 21:30:00 | 171   | 25    |
+---------------------+-------+-------+

И функция fetchdata при нажатии пользователем кнопки редактирования:

function fetchdata(Request $request)
{
  $student = mymodel::where('recordtime', $request->input('recordtime'))->first();
  $output = array(
    'recordtime'    =>  $student->recordtime,
    'fullname'     =>  $student->fullname,
    'formattedvalue'     =>  $student->formattedvalue,
    'author'     =>  Auth::user()->name
  );
  echo json_encode($output);
}

Проблема в том, что при нажатии кнопки редактирования отображается сообщение об ошибке:

message: "Trying to get property 'recordtime' of non-object", exception: "ErrorException",…}

Проблема пропал, если я использую id="'.$student->id.'" вместо id="'.$student->recordtime.'"

Но когда я использую id, он должен быть в GroupBy для работы, в результате чего таблица будет отображаться так:

+---------------------+-------+-------+
| recordtime          | text1 | text2 |
+---------------------+-------+-------+
| 09/02/2020 21:45:00 | 170   | -     |
+---------------------+-------+-------+
| 09/02/2020 21:45:00 | -     | 24    |
+---------------------+-------+-------+
| 09/02/2020 21:30:00 | 171   | -     |
+---------------------+-------+-------+
| 09/02/2020 21:30:00 | -     | 25    |
+---------------------+-------+-------+

Редактирование работает хорошо, но эта визуализация таблицы не вариант. Есть идеи, как решить проблему?

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