select() public method

Select items, eventually building dynamic query
Since: 2.0
public select ( array $params ) : array | boolean | mixed
$params array
return array | boolean | mixed
 /**
  * @return array
  */
 public function get_row(&$counter = 0, $method = null)
 {
     if (!empty($this->row) && 0 < (int) $this->id && 'table' != $method) {
         return $this->row;
     }
     if (is_object($this->pod) && ('Pods' == get_class($this->pod) || 'Pod' == get_class($this->pod))) {
         $this->row = $this->pod->fetch();
     } else {
         $this->row = false;
         if (!empty($this->data)) {
             if (empty($this->data_keys) || count($this->data) != count($this->data_keys)) {
                 $this->data_keys = array_keys($this->data);
             }
             if (count($this->data) == $this->total && isset($this->data_keys[$counter]) && isset($this->data[$this->data_keys[$counter]])) {
                 $this->row = $this->data[$this->data_keys[$counter]];
                 $counter++;
             }
         }
         if (false === $this->row && 0 < (int) $this->id && !empty($this->sql['table'])) {
             $this->pods_data->select(array('table' => $this->sql['table'], 'where' => '`' . $this->sql['field_id'] . '` = ' . (int) $this->id, 'limit' => 1));
             $this->row = $this->pods_data->fetch();
         }
     }
     return $this->row;
 }
Esempio n. 2
0
 /**
  * Find items of a pod, much like WP_Query, but with advanced table handling.
  *
  * @param array $params An associative array of parameters
  * @param int $limit (optional) (deprecated) Limit the number of items to find, use -1 to return all items with no limit
  * @param string $where (optional) (deprecated) SQL WHERE declaration to use
  * @param string $sql (optional) (deprecated) For advanced use, a custom SQL query to run
  *
  * @return \Pods The pod object
  * @since 2.0
  * @link http://pods.io/docs/find/
  */
 public function find($params = null, $limit = 15, $where = null, $sql = null)
 {
     $tableless_field_types = PodsForm::tableless_field_types();
     $simple_tableless_objects = PodsForm::field_method('pick', 'simple_objects');
     $this->params = $params;
     $select = '`t`.*';
     if (!in_array($this->pod_data['type'], array('pod', 'table')) && 'table' == $this->pod_data['storage']) {
         $select .= ', `d`.*';
     }
     if (empty($this->data->table)) {
         return $this;
     }
     $defaults = array('table' => $this->data->table, 'select' => $select, 'join' => null, 'where' => $where, 'groupby' => null, 'having' => null, 'orderby' => null, 'limit' => (int) $limit, 'offset' => null, 'page' => (int) $this->page, 'page_var' => $this->page_var, 'pagination' => (bool) $this->pagination, 'search' => (bool) $this->search, 'search_var' => $this->search_var, 'search_query' => null, 'search_mode' => $this->search_mode, 'search_across' => false, 'search_across_picks' => false, 'search_across_files' => false, 'filters' => $this->filters, 'sql' => $sql, 'expires' => null, 'cache_mode' => 'cache');
     if (is_array($params)) {
         $params = (object) array_merge($defaults, $params);
     }
     if (is_object($params)) {
         $params = (object) array_merge($defaults, get_object_vars($params));
     } else {
         $defaults['orderby'] = $params;
         $params = (object) $defaults;
     }
     $params = $this->do_hook('find', $params);
     $params->limit = (int) $params->limit;
     if (0 == $params->limit) {
         $params->limit = -1;
     }
     $this->limit = (int) $params->limit;
     $this->offset = (int) $params->offset;
     $this->page = (int) $params->page;
     $this->page_var = $params->page_var;
     $this->pagination = (bool) $params->pagination;
     $this->search = (bool) $params->search;
     $this->search_var = $params->search_var;
     $params->join = (array) $params->join;
     if (empty($params->search_query)) {
         $params->search_query = pods_var($this->search_var, 'get', '');
     }
     // Allow orderby array ( 'field' => 'asc|desc' )
     if (!empty($params->orderby) && is_array($params->orderby)) {
         foreach ($params->orderby as $k => &$orderby) {
             if (!is_numeric($k)) {
                 $key = '';
                 $order = 'ASC';
                 if ('DESC' == strtoupper($orderby)) {
                     $order = 'DESC';
                 }
                 if (isset($this->fields[$k]) && in_array($this->fields[$k]['type'], $tableless_field_types)) {
                     if (in_array($this->fields[$k]['pick_object'], $simple_tableless_objects)) {
                         if ('table' == $this->pod_data['storage']) {
                             if (!in_array($this->pod_data['type'], array('pod', 'table'))) {
                                 $key = "`d`.`{$k}`";
                             } else {
                                 $key = "`t`.`{$k}`";
                             }
                         } else {
                             $key = "`{$k}`.`meta_value`";
                         }
                     } else {
                         $pick_val = $this->fields[$k]['pick_val'];
                         if ('__current__' == $pick_val) {
                             $pick_val = $this->pod;
                         }
                         $table = $this->api->get_table_info($this->fields[$k]['pick_object'], $pick_val);
                         if (!empty($table)) {
                             $key = "`{$k}`.`" . $table['field_index'] . '`';
                         }
                     }
                 }
                 if (empty($key)) {
                     if (!in_array($this->pod_data['type'], array('pod', 'table'))) {
                         if (isset($this->pod_data['object_fields'][$k])) {
                             $key = "`t`.`{$k}`";
                         } elseif (isset($this->fields[$k])) {
                             if ('table' == $this->pod_data['storage']) {
                                 $key = "`d`.`{$k}`";
                             } else {
                                 $key = "`{$k}`.`meta_value`";
                             }
                         } else {
                             foreach ($this->pod_data['object_fields'] as $object_field => $object_field_opt) {
                                 if ($object_field == $k || in_array($k, $object_field_opt['alias'])) {
                                     $key = "`t`.`{$object_field}`";
                                 }
                             }
                         }
                     } elseif (isset($this->fields[$k])) {
                         if ('table' == $this->pod_data['storage']) {
                             $key = "`t`.`{$k}`";
                         } else {
                             $key = "`{$k}`.`meta_value`";
                         }
                     }
                     if (empty($key)) {
                         $key = $k;
                         if (false === strpos($key, ' ') && false === strpos($key, '`')) {
                             $key = '`' . str_replace('.', '`.`', $key) . '`';
                         }
                     }
                 }
                 $orderby = $key;
                 if (false === strpos($orderby, ' ')) {
                     $orderby .= ' ' . $order;
                 }
             }
         }
     }
     // Add prefix to $params->orderby if needed
     if (!empty($params->orderby)) {
         if (!is_array($params->orderby)) {
             $params->orderby = array($params->orderby);
         }
         foreach ($params->orderby as &$prefix_orderby) {
             if (false === strpos($prefix_orderby, ',') && false === strpos($prefix_orderby, '(') && false === stripos($prefix_orderby, ' AS ') && false === strpos($prefix_orderby, '`') && false === strpos($prefix_orderby, '.')) {
                 if (false !== stripos($prefix_orderby, ' DESC')) {
                     $k = trim(str_ireplace(array('`', ' DESC'), '', $prefix_orderby));
                     $dir = 'DESC';
                 } else {
                     $k = trim(str_ireplace(array('`', ' ASC'), '', $prefix_orderby));
                     $dir = 'ASC';
                 }
                 $key = $k;
                 if (!in_array($this->pod_data['type'], array('pod', 'table'))) {
                     if (isset($this->pod_data['object_fields'][$k])) {
                         $key = "`t`.`{$k}`";
                     } elseif (isset($this->fields[$k])) {
                         if ('table' == $this->pod_data['storage']) {
                             $key = "`d`.`{$k}`";
                         } else {
                             $key = "`{$k}`.`meta_value`";
                         }
                     } else {
                         foreach ($this->pod_data['object_fields'] as $object_field => $object_field_opt) {
                             if ($object_field == $k || in_array($k, $object_field_opt['alias'])) {
                                 $key = "`t`.`{$object_field}`";
                             }
                         }
                     }
                 } elseif (isset($this->fields[$k])) {
                     if ('table' == $this->pod_data['storage']) {
                         $key = "`t`.`{$k}`";
                     } else {
                         $key = "`{$k}`.`meta_value`";
                     }
                 }
                 $prefix_orderby = "{$key} {$dir}";
             }
         }
     }
     $this->data->select($params);
     return $this;
 }