/** * Choose the columns to select from, using an array. * * @param array list of column names or aliases * @return $this */ public function select_array(array $columns) { foreach ($columns as $i => $column) { if (is_array($column)) { $columns[$i][0] = $this->_column($column[0], TRUE); } else { // Check for * and model.* if (FALSE !== strpos($column, '*')) { $meta = $this->_meta; if ($column != '*') { $meta = explode('.', $column); $meta = Jelly::meta($meta[0]); } // Can we continue? Only if there's a valid meta object if ($meta) { $add_columns = array(); foreach ($meta->fields() as $field) { if ($field->in_db) { $add_columns[] = array($meta->table() . '.' . $field->column, $field->name); } else { if ($field->column instanceof Database_Expression) { $add_columns[] = array($field->column, $field->name); } } } // Add these columns before we continue parent::select_array($add_columns); // Remove the item we just added. It's no longer valid unset($columns[$i]); continue; } } $columns[$i] = $this->_column($column, TRUE); } } return parent::select_array($columns); }