/**
  * @param Fields $fields
  *
  * @return array
  */
 protected function getColumns(Fields $fields)
 {
     $newFields = [];
     foreach ($this->mapping->map() as $objectProperty => $tableColumn) {
         if (in_array($objectProperty, $fields->get())) {
             $newFields[$objectProperty] = $tableColumn;
         }
     }
     return $newFields;
 }
 /**
  * @param QueryBuilder  $queryBuilder
  * @param SortInterface $sort
  * @param Mapping       $mapping
  */
 public static function sort(QueryBuilder $queryBuilder, SortInterface $sort, Mapping $mapping)
 {
     $columns = $mapping->map();
     foreach ($sort->orders() as $propertyName => $order) {
         self::guardColumnExists($columns, $propertyName);
         $queryBuilder->orderBy($columns[$propertyName], $order->isAscending() ? Order::ASCENDING : Order::DESCENDING);
     }
 }
 /**
  * @param QueryBuilder    $query
  * @param FilterInterface $filter
  * @param Mapping         $mapping
  *
  * @return QueryBuilder
  */
 public static function filter(QueryBuilder $query, FilterInterface $filter, Mapping $mapping)
 {
     $placeholders = [];
     $columns = $mapping->map();
     foreach ($filter->filters() as $condition => $filters) {
         $filters = self::removeEmptyFilters($filters);
         if (count($filters) > 0) {
             self::processConditions($columns, $placeholders, $query, $condition, $filters);
         }
     }
     $query->setParameters($placeholders);
     return $query;
 }