diff --git a/common/Factory/Model.php b/common/Factory/Model.php index 58a4d38..f0c819b 100644 --- a/common/Factory/Model.php +++ b/common/Factory/Model.php @@ -29,12 +29,17 @@ class Model { return $this; } protected $columns; + /** + * , [, , ...] + * string | array(array) + * : [, *, *] + */ public function select($columns): Model { if ($this->columns == null) { $this->columns = []; } if (!is_array($columns)) { - $columns = [$columns]; + $columns = [[$columns]]; } $this->columns = array_merge($this->columns, $columns); return $this; @@ -43,12 +48,21 @@ class Model { if ($this->columns == null or count($this->columns) == 0) { return $orm; } - foreach ($this->columns as $column => $alias) { - if (is_numeric($column)) { - $orm = $orm->select($alias); - continue; + foreach ($this->columns as $column) { + if (is_string($column)) { + $column = [$column]; } - $orm = $orm->select($column, $alias); + $alias = $column['alias'] ?? $column[1] ?? $column[0]; + $method = 'select'; + if (count($column) > 2 or isset($column['type'])) { + $type = $column['type'] ?? $column[2] ?? ''; + switch ($type) { + case 'expr': + $method .= 'Expr'; + break; + } + } + $orm = $orm->{$method}($column, $alias); } return $orm; }