第十三天:(8)模型输出【模型和关联】

第十三天:(8)模型输出【模型和关联】

User模型为例,模型定义如下:

<?php
namespace app\index\model;

use think\Model;class User extends Model{
}

如果需要输出当前的模型对象有几种方式。

输出数组

可以使用toArray方法把当前的模型对象输出为数组。
修改User控制器的read操作方法如下:

// 读取用户数据并输出数组
public function read($id = ''){    
$user = UserModel::get($id);
    dump($user->toArray());
}

访问 http://tp5.com/user/20 页面输出结果为:

array (size=7)  'id' => int 20
  'nickname' => string '张三' (length=6)  
  'email' => string 'zhanghsan@qq.com' (length=16)  
  'birthday' => string '1988/01/15' (length=10)  
  'status' => string '待审核' (length=9)  
  'create_time' => string '2016-05-02 16:40:57' (length=19)  
  'update_time' => string '2016-05-02 16:40:57' (length=19)

可以看到,User模型的数据已经经过了读取器方法处理。

如果输出的时候需要隐藏某些属性,可以使用:

// 读取用户数据并输出数组public function read($id = ''){    $user = UserModel::get($id);
    dump($user->hidden(['create_time','update_time'])->toArray());
}

再次访问 http://tp5.com/user/20 页面输出结果变成:

array (size=5)  'id' => int 20
  'nickname' => string '张三' (length=6)  
  'email' => string 'zhanghsan@qq.com' (length=16)  
  'birthday' => string '1988/01/15' (length=10)  
  'status' => int 2

或者指定一些属性输出,则可以用:

// 读取用户数据并输出数组public function read($id = ''){    
$user = UserModel::get($id);
    dump($user->visible(['id','nickname','email'])->toArray());
}

再次访问 http://tp5.com/user/20 页面输出结果变成:

array (size=3)  'id' => int 20
  'nickname' => string '张三' (length=6)  
  'email' => string 'zhanghsan@qq.com' (length=16)

如果读取器定义了一些非数据库字段的读取,例如:

<?php
namespace app\index\model;
use think\Model;
class User extends Model{    // status修改器
    protected function getUserStatusAttr($value)
    {        $status = [-1 => '删除', 0 => '禁用', 1 => '正常', 2 => '待审核'];        
    return $status[$value];
    }
}

而我们如果需要输出user_status属性数据的话,可以使用append方法,用法如下:

// 读取用户数据并输出数组
public function read($id = ''){    
$user = UserModel::get($id);
    dump($user->append(['user_status'])->toArray());
}

再次访问 http://tp5.com/user/20 页面输出结果变成:

array (size=8)  
    'id' => int 20
  'nickname' => string '张三' (length=6)  
  'email' => string 'zhanghsan@qq.com' (length=16)  
  'birthday' => string '1988/01/15' (length=10)  
  'status' => int 2
  'create_time' => string '2016-05-02 16:40:57' (length=19)  
  'update_time' => string '2016-05-02 16:40:57' (length=19)  
  'user_status' => string '待审核' (length=9)

输出JSON

对于API开发而言,经常需要返回JSON格式的数据,修改read操作方法改成JSON输出:

// 读取用户数据输出JSON
public function read($id = ''){    
$user = UserModel::get($id);    
echo $user->toJson();
}

访问 http://tp5.com/user/20 页面输出结果为:

{"id":22,"nickname":"张三","email":"zhanghsan@qq.com","birthday":"1988\/01\/15","status":2,"create_time":"2016-05-02 16:40:57","update_time":"2016-05-02 16:40:57"}

或者采用更简单的方法输出JSON,下面的方式是等效的:

// 读取用户数据直接输出JSON
public function read($id = ''){    
echo UserModel::get($id);
}



回复列表


回复操作