public function run() { $offset = 0; // skip header while (1) { $batchRows = $this->reader->setOffset($offset)->setLimit($this->batchSize)->fetchAssoc(); // read till returned iterator is empty $batchRows->rewind(); if (!$batchRows->valid()) { break; } $itemsBatch = new DataApi\Batch\EntitiesBatch(); foreach ($batchRows as $row) { // process row - remove id column etc. $itemsBatch->addEntity($row['title'], $row); //var_dump($row); } $this->client->insertOrUpdateItems($itemsBatch); $offset += $this->batchSize; } }
/** * upload all data to recommeder * */ public function upload(DataApi\Client $client) { if (!is_null($this->filePath)) { $batchSize = 5000; $csvFile = new CsvFile($this->filePath); $csvFile->rewind(); if (!$csvFile->valid()) { break; } $header = $csvFile->current(); $csvFile->next(); $itemsBatch = new DataApi\Batch\EntitiesBatch(); $batchRowsCount = 0; while ($csvFile->valid()) { $attributes = array_combine($header, $csvFile->current()); $csvFile->next(); // process row - remove id column etc. $pk = $this->manifest->getPrimaryKey()[0]; $id = $attributes[$pk]; unset($attributes[$pk]); $itemsBatch->addEntity($id, $attributes); $batchRowsCount += 1; if ($batchRowsCount == $batchSize || !$csvFile->valid()) { $client->insertOrUpdateItems($itemsBatch); $itemsBatch = new DataApi\Batch\EntitiesBatch(); $batchRowsCount = 0; } } } return $this; }
/** * @param EntitiesBatch $entities * @return NULL * @throws RequestFailedException when request failed for some reason */ public function insertOrUpdateEntities(EntitiesBatch $entities) { $restriction = new Restriction([], [self::ENTITIES_PARAMETER => $entities->getEntities()]); return $this->performPost($this->strategy->getInsertOrUpdateEntityUrl(), $restriction); }