예제 #1
0
 private function extract(Connection $conn, array &$original, array &$extractor)
 {
     $keyset = [];
     foreach ($original as &$item) {
         if (isset($item[$extractor['key']])) {
             $keyset[] = $item[$extractor['key']];
         }
     }
     if (sizeof($keyset) > 0) {
         $where = $extractor['query']->getWhere();
         if (null === $where) {
             $extractor['query']->where(new QueryClause($extractor['matchingColumn'] . ' IN (' . implode(',', $keyset) . ')'));
         } else {
             $extractor['query']->where(QueryOperator::op('AND')->expr(new QueryClause($extractor['matchingColumn'] . ' IN (' . implode(',', $keyset) . ')'))->expr($where));
         }
         $stmt = $extractor['query']->createStatement($conn);
         $retrieved = array();
         while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
             $retrieved[$row[$extractor['matchingAlias']]] = $row;
         }
         $stmt->closeCursor();
     }
     foreach ($original as &$item) {
         if (isset($item[$extractor['key']]) && isset($retrieved[$item[$extractor['key']]])) {
             foreach ($retrieved[$item[$extractor['key']]] as $key => $value) {
                 $item[$extractor['prefix'] . ucfirst($key)] = $value;
             }
         }
     }
 }