# 显示微博
本节将为每个人显示自己发布的微博。
## 关联查询
在上一节中,我们定义了
~~~php
// 正向关联 Post 模型
public function posts()
{
return $this->hasMany('Post', 'user_id');
}
~~~
非常简单的,在控制器中只需要多加一句 `with('posts')` 即可展示该用户的所有微博
`application\user\controller\Auth.php`
~~~php
public function read($id)
{
$user = User::with('posts')->find($id);
return $user;
}
~~~
接着,访问 http://thinkphp.test/user/auth/read/id/1.html ,可以看到一行 `"posts":[]`
这是因为现在 `posts` 表中还未有数据,我们需要为用户填充一些假数据。
命令行键入 `php think seed:create Posts`
`database\seeds\Posts.php`
~~~php
<?php
use think\migration\Seeder;
class Posts extends Seeder
{
public function run()
{
$faker = Faker\Factory::create();
$data = [];
for ($i = 0; $i < 200; $i++) {
$user_id = !($i % 2) ? 1 : 2;
$data[] = [
'content' => $faker->text,
'user_id' => $user_id,
];
}
$this->table('posts')->insert($data)->save();
}
}
~~~
上面代码中,`$i % 2` 表示能否被 2 整除。
创建完毕后运行 `php think seed:run` 再次访问 http://thinkphp.test/user/auth/read/id/1.html 就可以看到刚刚装填好的假数据了。
## 前端显示
现在数据库中已经有填充好的假数据,我们只需要在前端中输出即可。
`application\user\controller\Auth.php`
~~~php
public function read($id)
{
$user = User::with(['posts' => function ($query) {
$query->limit(8);
$query->order('created_at', 'desc');
}])->find($id);
$this->assign([
'user' => $user,
'session' => Session::get('user')
]);
return $this->fetch();
}
~~~
注意,`with(['posts' => function ($query)` 是一个闭包操作,下面的 `limit` 等语句都是针对关联模型 `posts` 操作而不是 `User`
切换到前端页面
`resources\views\user\auth\read.blade.php`
~~~html
@extends('_layout.default')
@section('title', $user->name)
@section('content')
<div class="panel panel-default list-group-flush">
<div class="panel-heading">
<h4>
@if(!is_null($session) && $session->id === $user->id)
<a class="btn btn-primary" href="{{ url('user/auth/edit', ['id' => session('user.id')]) }}">
编辑资料
</a>
欢迎您
@else
您正在查看
@endif
{{ $user->name }}
</h4>
</div>
@foreach ($user->posts as $post)
<div class="list-group-item">
<p>
{{ $post->content }}
</p>
{{ $post->created_at }}
</div>
@endforeach
</div>
@stop
~~~
再次访问 http://thinkphp.test/user/auth/read/id/1.html 即可看到前端内容完整的被渲染出来了。
- 第一章. 基础信息
- 1.1 序言
- 1.2 关于作者
- 1.3 本书源码
- 1.4 反馈纠错
- 1.5 安全指南
- 1.6 捐助作者
- 第二章. 开发环境布置
- 2.1 编辑器选用
- 2.2 命令行工具
- 2.3 开发环境搭建
- 2.4 浏览器选择
- 2.5 第一个应用
- 2.6 Git 工作流
- 第三章. 构建页面
- 3.1 章节说明
- 3.2 静态页面
- 3.3 Think 命令
- 3.4 小结
- 第四章. 优化页面
- 4.1 章节说明
- 4.2 样式美化
- 4.3 局部视图
- 4.4 路由链接
- 4.5 用户注册页面
- 4.6 集中视图
- 4.7 小结
- 第五章. 用户模型
- 5.1 章节说明
- 5.2 数据库迁移
- 5.3 查看数据表
- 5.4 模型文件
- 5.5 小结
- 第六章. 用户注册
- 6.1 章节说明
- 6.2 注册表单
- 6.3 用户数据验证
- 6.4 注册失败错误信息
- 6.5 注册成功
- 6.6 小结
- 第七章. 会话管理
- 7.1 章节说明
- 7.2 会话
- 7.3 用户登录
- 7.4 退出
- 7.5 小结
- 第八章. 用户 CRUD
- 8.1 章节说明
- 8.2 重构代码
- 8.3 更新用户
- 8.4 权限系统
- 8.5 列出所有用户
- 8.6 删除用户
- 8.7 访客模式
- 8.8 优化前端
- 8.9 小结
- 第九章. 微博 CRUD
- 9.1 章节说明
- 9.2 微博模型
- 9.3 显示微博
- 9.4 发布微博
- 9.5 微博数据流
- 9.6 删除微博
- 9.7 小结