Я хочу обновить записи в Postgresql БД и Laravel. Проблема в том, что столбцы псевдонимов не связаны с таблицей, но я сделал их на первом месте:
сообщение: «SQLSTATE [42703]: неопределенный столбец: 7 ОШИБКА: столбец« nivo600 »из отношение "measure_kanal" не существует↵ ЛИНИЯ 1: обновить "measure_kanal" установить "recordtime" = $ 1, "nivo600" = $ 2, "... ↵
Функция в контроллере:
$student = Stamboliiski::where('recordtime', $request->get('kanal_id'))
->selectRaw('recordtime')
->selectRaw('max(formattedvalue) filter (where fullname = \'text 1\') as nivo600')
->selectRaw('max(formattedvalue) filter (where fullname = \'text 2\') as razhod600')
->update([
'recordtime' => $request->input('recordtime'),
'nivo600' => $request->input('formattedvalueN'),
'razhod600' => $request->input('formattedvalueR'),
])
->where(function ($query) {
$query->where('fullname', 'like', "text 1")
->orWhere('fullname', 'like', "text 2");
})
->groupBy('recordtime')
->orderBy('recordtime')
->first();
$success_output = '<div class="alert alert-success">The record is updated!</div>';
Модель:
class Stamboliiski extends Model
{
protected $connection = 'stamboliiski';
protected $table = 'meas_kanal';
protected $fillable = ['fullname','formattedvalue','recordtime','qualitydesc','statedesc','author','id'];
}
Почему?
РЕДАКТИРОВАТЬ 1 после комментария @Dimitri Mostrey:
$student = Stamboliiski::where('recordtime', $request->get('kanal_id'))
->selectRaw('recordtime')
->selectRaw('max(formattedvalue) filter (where fullname = \'text 1\') as nivo600')
->selectRaw('max(formattedvalue) filter (where fullname = \'text 2\') as razhod600')
->where(function ($query) {
$query->where('fullname', 'like', "text 1")
->orWhere('fullname', 'like', "text 2");
})
->groupBy('recordtime')
->orderBy('recordtime')
->first();
$student->recordtime = $request->get('recordtime');
$student->nivo600 = $request->get('formattedvalueN');
$student->razhod600 = $request->get('formattedvalueR');
$student->author = Auth::user()->name;
$student->save();
Ошибка теперь такова:
сообщение: «SQLSTATE [42703]: неопределенный столбец: 7 ОШИБКА: столбец« nivo600 »отношения« measure_kanal »не существует↵LINE 1: обновить« measure_kanal »установить« nivo600 »= $ 1,» razhod600 "= $ 2," a ... ↵ ^ (SQL: обновить набор "measure_kanal" "nivo600" = 1.86, "razhod600" = 9.76, "author" = Джон Доу, "updated_at" = 2020-04-30 10:22:28 где "id" равен нулю) "
В этом методе используются столбцы идентификаторов, которые мне не нужны, и даже я не знаю, почему вместо них использовалась метка времени .
РЕДАКТИРОВАТЬ 2 при ответе @Uzair Riaz
К сожалению, проблема все еще здесь. После смены контроллера и модели появляется сообщение об успехе, но ничего не меняется. Например, если я хочу изменить значение nivo600
на 1
в recordtime
2020-04-17 00:00:00
. После того, как я эхом $student
в dd
:
App\StamboliiskiMeasCanal {#530
#connection: "stamboliiski"
#table: "meas_kanal"
#fillable: array:8 [
0 => "fullname"
1 => "formattedvalue"
2 => "recordtime"
3 => "qualitydesc"
4 => "statedesc"
5 => "author"
6 => "id"
7 => "updated_at"
]
#mapping: array:2 [
"nivo600" => "formattedvalue"
"razhod600" => "formattedvalue"
]
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#attributes: array:6 [
"recordtime" => "2020-04-17 00:00:00"
"nivo600" => "1.86"
"razhod600" => "9.76"
"author" => "Христиан Йорданов"
"formattedvalue" => "9.76"
"updated_at" => "2020-05-05 06:47:26"
]
#original: array:6 [
"recordtime" => "2020-04-17 00:00:00"
"nivo600" => "1.86"
"razhod600" => "9.76"
"author" => "Христиан Йорданов"
"formattedvalue" => "9.76"
"updated_at" => "2020-05-05 06:47:26"
]
#changes: array:4 [
"recordtime" => "2020-04-17 00:00:00"
"author" => "Христиан Йорданов"
"formattedvalue" => "9.76"
"updated_at" => "2020-05-05 06:47:26"
]
#casts: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#hidden: []
#visible: []
#guarded: array:1 [
0 => "*"
]
}
Кажется, что обновление не производится ...