think\Model::toArray PHP Method

toArray() public method

转换当前模型对象为数组
public toArray ( ) : array
return array
    public function toArray()
    {
        $item = [];
        //过滤属性
        if (!empty($this->visible)) {
            $data = array_intersect_key($this->data, array_flip($this->visible));
        } elseif (!empty($this->hidden)) {
            $data = array_diff_key($this->data, array_flip($this->hidden));
        } else {
            $data = $this->data;
        }
        foreach ($data as $key => $val) {
            if ($val instanceof Model || $val instanceof Collection) {
                // 关联模型对象
                $item[$key] = $val->toArray();
            } elseif (is_array($val) && reset($val) instanceof Model) {
                // 关联模型数据集
                $arr = [];
                foreach ($val as $k => $value) {
                    $arr[$k] = $value->toArray();
                }
                $item[$key] = $arr;
            } else {
                // 模型属性
                $item[$key] = $this->getAttr($key);
            }
        }
        // 追加属性(必须定义获取器)
        if (!empty($this->append)) {
            foreach ($this->append as $name) {
                $item[$name] = $this->getAttr($name);
            }
        }
        return !empty($item) ? $item : [];
    }

Usage Example

Example #1
0
 /**
  * 一对一 关联模型预查询拼装
  * @access public
  * @param string    $model 模型名称
  * @param string    $relation 关联名
  * @param Model     $result 模型对象实例
  * @return void
  */
 protected function match($model, $relation, &$result)
 {
     // 重新组装模型数据
     foreach ($result->toArray() as $key => $val) {
         if (strpos($key, '__')) {
             list($name, $attr) = explode('__', $key, 2);
             if ($name == $relation) {
                 $list[$name][$attr] = $val;
                 unset($result->{$key});
             }
         }
     }
     if (!isset($list[$relation])) {
         // 设置关联模型属性
         $list[$relation] = [];
     }
     $result->setAttr($relation, (new $model($list[$relation]))->isUpdate(true));
 }
All Usage Examples Of think\Model::toArray