These values are calculated from the request paramaters. For lists it allocates a Repository
Deprecation:
Example #1
0
 public function testGetFields()
 {
     $request = new Request(['fields' => 'field1,field2,field3', 'sortBy' => 'id', 'sortOrder' => 'desc', 'search' => 'test', 'searchFields' => 'title', 'limit' => 10, 'page' => 3]);
     $helper = new ListRestHelper($request, $this->em);
     $this->assertEquals(['field1', 'field2', 'field3'], $helper->getFields());
     $this->assertEquals(['id' => 'desc'], $helper->getSorting());
     $this->assertEquals('test', $helper->getSearchPattern());
     $this->assertEquals(['title'], $helper->getSearchFields());
     $this->assertEquals(10, $helper->getLimit());
     $this->assertEquals(20, $helper->getOffset());
 }
Example #2
0
 /**
  * Find list with parameter.
  *
  * @param array  $where
  * @param string $prefix
  * @param bool   $justCount      Defines, if find should just return the total number of results
  * @param array  $joinConditions optionally specify conditions on join
  *
  * @return array|object|int
  */
 public function find($where = [], $prefix = 'u', $justCount = false, $joinConditions = [])
 {
     $searchPattern = $this->helper->getSearchPattern();
     $searchFields = $this->helper->getSearchFields();
     // if search string is set, but search fields are not, take all fields into account
     if (!is_null($searchPattern) && $searchPattern != '' && (is_null($searchFields) || count($searchFields) == 0)) {
         $searchFields = $this->getEntityManager()->getClassMetadata($this->getEntityName())->getFieldNames();
     }
     $textFields = $this->getFieldsWitTypes(['text', 'string', 'guid'], $searchFields);
     if (is_numeric($searchPattern)) {
         $numberFields = $this->getFieldsWitTypes(['integer', 'float', 'decimal'], $searchFields);
     } else {
         $numberFields = [];
     }
     $queryBuilder = new ListQueryBuilder($this->getClassMetadata()->getAssociationNames(), $this->getClassMetadata()->getFieldNames(), $this->getEntityName(), $this->helper->getFields(), $this->helper->getSorting(), $where, $textFields, $numberFields, $joinConditions);
     if ($justCount) {
         $queryBuilder->justCount('u.id');
     }
     $dql = $queryBuilder->find($prefix);
     $query = $this->getEntityManager()->createQuery($dql);
     if (!$justCount) {
         $query->setFirstResult($this->helper->getOffset())->setMaxResults($this->helper->getLimit());
     }
     if ($searchPattern != null && $searchPattern != '') {
         if (count($searchFields) > 0) {
             if (count($textFields) > 0) {
                 $query->setParameter('search', '%' . $searchPattern . '%');
             }
             if (count($numberFields) > 0) {
                 $query->setParameter('strictSearch', $searchPattern);
             }
         }
     }
     // if just used for counting
     if ($justCount) {
         return intval($query->getSingleResult()['totalcount']);
     }
     $results = $query->getArrayResult();
     // check if relational filter was set ( e.g. emails[0]_email)
     // and filter result
     if (count($filters = $queryBuilder->getRelationalFilters()) > 0) {
         $filteredResults = [];
         // check if fields do contain id, else skip
         if (count($fields = $this->helper->getFields()) > 0 && array_search('id', $fields) !== false) {
             $ids = [];
             foreach ($results as $result) {
                 $id = $result['id'];
                 // check if result already in resultset
                 if (!array_key_exists($id, $ids)) {
                     $ids[$id] = -1;
                     $filteredResults[] = $result;
                 }
                 ++$ids[$id];
                 // check filters
                 foreach ($filters as $filter => $key) {
                     // check if we are at the specified index
                     if ($key == $ids[$id]) {
                         $index = $this->getArrayIndexByKeyValue($filteredResults, $id);
                         // set to current key
                         $filteredResults[$index][$filter] = $result[$filter];
                     }
                 }
             }
             $results = $filteredResults;
         }
     }
     return $results;
 }