Vícenásobný insert – foreach cyklus
- ForestCZE
- Člen | 209
Zdravím, mám metodu:
private function addRecords(array $records)
{
$data = [];
foreach ($records as $record)
{
$data["country"] = $record->COUNTRY;
$data["destination"] = $record->DESTINATION;
$data["name"] = $record->NAME;
$data["accommodation"] = $record->ACCOMMODATION;
$data["category"] = $record->CATEGORY;
$data["latitude"] = $record->MAP["LATITUDE"];
$data["longitude"] = $record->MAP["LONGITUDE"];
$data["description"] = $record->DESCRIPTION;
$this->database->getHotels()->insert($data);
}
}
Potřeboval bych poradit, jak poskládat vícenásobný insert, abych mohl poslat pouze jeden insert. Nevím, jak to v tom foreachi udělat. Pomohl by mi někdo, prosím? Děkuji.
- nightfish
- Člen | 519
Používáš Database
Explorer? Pokud ano, tak uložit do pole a zavolat nad ním
insert()
.
private function addRecords(array $records)
{
$rows = [];
foreach ($records as $record)
{
$data = [];
$data["country"] = $record->COUNTRY;
$data["destination"] = $record->DESTINATION;
$data["name"] = $record->NAME;
$data["accommodation"] = $record->ACCOMMODATION;
$data["category"] = $record->CATEGORY;
$data["latitude"] = $record->MAP["LATITUDE"];
$data["longitude"] = $record->MAP["LONGITUDE"];
$data["description"] = $record->DESCRIPTION;
$rows[] = $data;
}
$this->database->getHotels()->insert($rows);
}
Samozřejmě záleží na tom, kolik máš celkem záznamů. Pokud by jich
bylo více než tisíc, tak bych nedělal jeden obrovský insert()
,
nýbrž bych data rozdělil na dávky po tisíci záznamech.
- ForestCZE
- Člen | 209
@nightfish Skript jako takový funguje :) Ale jak píšeš s tím
počtem záznamů. Mám asi 1 133 záznamů. Původně jsme odesílal, co
záznam, to insert, tak jsem si myslel, že by mi pomohlo, kdyby se to odeslalo
v jednom insertu. Insertne se mi 221 záznamů a pak se to přeruší,
protože Maximum execution time of 30 seconds exceeded
, což mi
dělalo i předtím. Jak tohle vyřešit?
EDIT: Tak insertem to není. Právě jsem zjistil, že to zastaví parsování.
Editoval ForestCZE (19. 7. 2019 17:48)