微博模型
和之前创建 User 模型的步骤一致,我们需要
- 创建数据表 Posts
- 建立微博模型 PostModel
创建数据表
打开命令行,键入命令:
shell
php think migrate:create Posts
database\migrations\20190728094237_posts.php
<?php
use think\migration\Migrator;
class Posts extends Migrator
{
/**
* Migrate Up.
*/
public function up()
{
// create the table
$table = $this->table('posts');
$table->addColumn('content', 'text')
->addColumn('user_id', 'integer')
->addTimestamps('created_at', 'updated_at')
->create();
}
/**
* Migrate Down.
*/
public function down()
{
$this->dropTable('posts');
}
}
运行命令:
shell
php think migrate:run
其中,user_id
是为了和 User
表中的 id
字段关联,当我们创建关系模型时,只用一个 id
即可读取该用户发送过的所有推文。
创建微博模型
和之前一致,只用在控制台中键入命令:
shell
php think make:model User/Post
创建完成后并打开文件:
application\user\model\Post.php
<?php
namespace app\User\model;
use think\Model;
class Post extends Model
{
// 定义数据表名
protected $table = 'posts';
// 定义时间戳字段名
protected $createTime = 'created_at';
protected $updateTime = 'updated_at';
}
这样,基本的模型我们已经定义。
模型关联
在用户推文获取的过程中,我们一个用户对应多条推文,如果不通过模型进行关联,在查询时则需要使用用户的 id
查询两遍模型,如
php
User::get($user_id)
Post::get($user_id)
这样的工作非常繁琐并且多次读库增加数据库压力,所以我们需要对模型进行关联定义。
- 一个用户有多条推文
- 一条推文只有一个用户
定义正向关联:
application\user\model\User.php
<?php
...
class User extends Model
{
// 正向关联 Post 模型
public function posts()
{
return $this->hasMany('Post', 'user_id');
}
...
定义反向关联:
application\user\model\Post.php
<?php
...
class Post extends Model
{
反向关联 User 模型
public function user()
{
return $this->belongsTo('User');
}
...
非常简单的,两个关联操作已经定义,下一节将展示出关联数据。