Think\Db\Query::field PHP Method

field() public method

指定查询字段 支持字段排除和指定数据表
public field ( mixed $field, boolean $except = false, string $tableName = '', string $prefix = '', string $alias = '' )
$field mixed
$except boolean 是否排除
$tableName string 数据表名
$prefix string 字段前缀
$alias string 别名前缀
    public function field($field, $except = false, $tableName = '', $prefix = '', $alias = '')
    {
        if (empty($field)) {
            return $this;
        }
        if (is_string($field)) {
            $field = array_map('trim', explode(',', $field));
        }
        if (true === $field) {
            // 获取全部字段
            $fields = $this->getTableInfo($tableName ?: (isset($this->options['table']) ? $this->options['table'] : ''), 'fields');
            $field = $fields ?: ['*'];
        } elseif ($except) {
            // 字段排除
            $fields = $this->getTableInfo($tableName ?: (isset($this->options['table']) ? $this->options['table'] : ''), 'fields');
            $field = $fields ? array_diff($fields, $field) : $field;
        }
        if ($tableName) {
            // 添加统一的前缀
            $prefix = $prefix ?: $tableName;
            foreach ($field as $key => $val) {
                if (is_numeric($key)) {
                    $val = $prefix . '.' . $val . ($alias ? ' AS ' . $alias . $val : '');
                }
                $field[$key] = $val;
            }
        }
        if (isset($this->options['field'])) {
            $field = array_merge($this->options['field'], $field);
        }
        $this->options['field'] = array_unique($field);
        return $this;
    }

Usage Example

Exemplo n.º 1
0
 /**
  * 附加查询表达式
  * @access protected
  * @param \think\db\Query $query 查询对象
  * @return \think\db\Query
  */
 protected static function attachQuery($query)
 {
     $master = basename(str_replace('\\', '/', get_called_class()));
     $class = new static();
     $fields = self::getModelField($master, '', $class->mapFields);
     $query->alias($master)->field($fields);
     foreach (static::$relationModel as $key => $model) {
         $name = is_int($key) ? $model : $key;
         $table = is_int($key) ? self::db()->name($name)->getTable() : $model;
         $query->join($table . ' ' . $name, $name . '.' . $class->fk . '=' . $master . '.' . $class->getPk());
         $fields = self::getModelField($name, $table, $class->mapFields);
         $query->field($fields);
     }
     return $query;
 }