Nette Database – UPDATE mi do query hodí závorky
- unbringer
- Člen | 9
Zdravím,
Mám problém s vybudováním UPDATE, který by prošel. SqlBuilder, který
staví query, mi tam hodí závorky na místo, kde by neměly být.
return $this->database->table('Attendance')->where('StudentClassId = ? AND LessonId = ?',
$values[0]['StudentClassId'],
$values[0]['LessonId'])
->update($values);
Query:
UPDATE `Attendance`
SET (`StudentUserId`='25', `StudentClassId`='39', `LessonId`='18', `AttendanceDate`='2020-09-03', `AttendanceTypeId`='1',
`AttendanceCard`='99')
WHERE (`StudentClassId` = '39' AND `LessonId` = '18')
Nevíte někdo, jak ten dotaz přepsat?
Byl jsem většinou zvyklý si ty query psát ručně, ale když pracuju
s array, tak mi tohle dost usnadnilo práci a vypisování query.
Editoval unbringer (26. 9. 2020 21:57)
- unbringer
- Člen | 9
Nepomohlo to.
Zkusil i vynutit konverzi na správné datové typy. Dosadit tam i natvrdo odpovídající hodnoty. Pořád si to tam vesele hází závorky.
public function updateAttendances($values)
{
foreach ($values as $key => $value)
{
$values[$key]['StudentUserId'] = (int)$value['StudentUserId'];
$values[$key]['StudentClassId'] = (int)$value['StudentClassId'];
$values[$key]['AttendanceTypeId'] = (int)$value['AttendanceTypeId'];
$values[$key]['LessonId'] = (int)$value['LessonId'];
$values[$key]['AttendanceCard'] = (int)$value['AttendanceCard'];
$values[$key]['AttendanceDate'] = date('d.m.Y', $value['AttendanceDate']);
}
bdump($values);
return $this->database->table('attendance')->where('StudentClassId = ? AND LessonId = ?',
$values[0]['StudentClassId'],
$values[0]['LessonId'])
->update($values);
}
UPDATE `attendance`
SET (`StudentUserId`=25, `StudentClassId`=39, `LessonId`=18, `AttendanceDate`='01.01.1970', `AttendanceTypeId`=1,
`AttendanceCard`=55)
WHERE (`StudentClassId` = 39 AND `LessonId` = 18)
Editoval unbringer (26. 9. 2020 18:55)
- Šaman
- Člen | 2667
Eh. závorky? Já myslel, že ti vadí uvozovky okolo numerických idček.
Nojo, na tom zformátovaným je to vidět. Ale nenapadá mě, proč to dělá.
Resp. napadá mě, že máš ta pole ještě vnořená. Tedy že
$values
nebsahují prvky, ale ty jsou až ve
$values[0]
a pak by mělo pomoct to co psal MajklNajt. I tohle by
ale měl odhalit dump dat, která předáváš.
Editoval Šaman (26. 9. 2020 19:50)
- unbringer
- Člen | 9
Nene, šlo fakt o uvozovky.
Akorát jsem si u prvního příspěvku nevšiml, že ten kód musím dát do
tagu PHP kódu.
Díky moc, už to funguje. Byl tam problém, že jsem měl pole záznamů, co
jsem chtěl vkládat do DB.
Tak jsem tam nad tím polem hodil foreach.
public function updateAttendances($values)
{
foreach ($values as $key => $value)
{
$this->database->table('attendance')->where('StudentUserId = ? AND StudentClassId = ? AND LessonId = ?',
$values[$key]['StudentUserId'],
$values[$key]['StudentClassId'],
$values[$key]['LessonId'])
->update($values[$key]);
}
}