Hromadný update záznamů v multidimenzionálním poli
- trta911
- Člen | 35
Ahoj, řeším s Nette hromadné vkládání/aktualizace potencionálně mnoha záznamů. Hromadný insert jsem vyřešil, ale snažil jsem se podobným způsobem vyřešit i update. To se mi ale nepovedlo. Proto prosím o radu, zda je něco takového možné (doufám že ano, když hromadný insert existuje).
Zde je způsob jak jsem se snažil o update – vyhazuje sql chybu
foreach($items as $item){
$upd[] = [
'name' => $item['name'],
'surname' => $item['surname']
];
}
$this->database->table('tbl')->update($upd);
Nacpal bych do toho foreache ten vlastní update ale tomu jsem se chtěl nějak vyhnout.
Děkuji všem za pomoc.
- Mysteria
- Člen | 797
Co je cílem? Ten kód nedává smysl minimálně z toho důvodu, že zavolání UPDATE bez podmínky přepíše všechny řádky tabulky, takže i kdyby se ten UPDATE přesunul do toho foreache, tak všechna data budou mít hodnotu poslední položky v $items, jinak do ->update by mělo přijít jenom jednoduché pole s novýma hodnotama a né pole s vnořenými poli s novýma hodnotama.
Co se týká optimalizace rychlosti, tak je stačí spustit v transakci, to by mělo jejich vykonání znatelně urychlit.
- trta911
- Člen | 35
popíšu to jinak – přesněji.
Mám xml feed se zbožím. No a potřebuju nové produkty uložit do db – to výše popsaným způsobem funguje. Ale pokud potřebuju na základě změny některých parametrů příslušné produkty změnit (cena, dostupnost,.....) tak jsem se snažil to vyřešit stejným způsobem (návyk z Codeigniteru a Datamapperu) a to nejde. Produkty právě iteruji foreachem a tak jako náhradní řešení mě napadlo přímo dát update dotaz do toho cyklu. Chápu, že to asi není ideál ale nic lepšího mě v tuhle chvíli nenapadá.
Myslel jsem to takto:
foreach ($x as $item)
{
$upd = [
'name' => $item['name'],
'surname' => $item['surname']
];
$this->database->table('tbl')->where('id',$item['id'])->update($upd);
}