### ORM 数据库
请充分理解关联关系中的
## 一对一关联 (hasOne)
<?php
namespace app\index\model;
use think\Model;
class User extends Model
{
public function profile()
{
return $this->hasOne('Profile','uid'); //uid是外键
}
}
## 一对一关联 (从属belongsTo)
<?php
name app\index\model;
use think\Model;
class Comment extends Model
{
public function article()
{
return $this->belongsTo('article');
}
}
## 关联删除
$article = Article::get(1,'comments');
$article->together('comments')->delete();
## 一对多关联
例如一篇文章可以有多个评论
<?php
namespace app\index\model;
use think\Model;
class Article extends Model
{
public function comments()
{
return $this->hasMany('Comment');
}
}
同样,也可以定义外键的名称
<?php
namespace app\index\model;
use think\Model;
class Article extends Model
{
public function comments()
{
return $this->hasMany('Comment','art_id');
}
}
根据关联条件查询
查询评论超过3个的文章
$list = Article::has('comments','>',3)->select();
查询评论状态正常的文章
$list = Article::hasWhere('comments',['status'=>1])->select();
关联新增
$article = Article::find(1);
增加一个关联数据
$article->comments()->save(['content'=>'test']);
批量增加关联数据
$article->comments()->saveAll([
['content'=>'thinkphp'],
['content'=>'onethink'],
]);
关联查询
我们可以通过下面的方式获取关联数据
$article = Article::get(1);
获取文章的所有评论
dump($article->comments);
也可以进行条件搜索
dump($article->comments()->where('status',1)->select());
关联关系对照
类型 |关联关系 |相对的关联关系
-|-|-
一对一| hasOne| belongsTo
一对多 |hasMany |belongsTo
多对多| belongsToMany |belongsToMany
远程一对多 |hasManyThrough |不支持
多态一对一 |morphOne |morphTo
多态一对多 |morphMany |morphTo
理解关联关系,有助于快速开发系统功能。
禁止直接使用DB底层直接操作数据库。
只可以使用model层。方便以后分表分库操作,日志记录等。
例如,Profile模型中就可以定义一个相对的关联关系。
<?php
namespace app\index\model;
use think\Model;
class Profile extends Model
{
public function user()
{
return $this->belongsTo('User');
}
}
在进行关联查询的时候,也是类似,只是当前模型不同。
获取档案实例
$profile = Profile::get(1);
获取档案所属的用户名称
echo $profile->user->name;
如果你需要对关联模型进行更多的查询约束,可以在关联方法的定义方法后面追加额外的查询链式方法(但切忌不要滥用,并且不要使用实际的查询方法),例如:
<?php
namespace app\index\model;
use think\Model;
class User extends Model
{
public function book()
{
return $this->hasMany('Book')->order('pub_time');
}
}
更多关联请查[手册](https://www.kancloud.cn/manual/thinkphp5_1/354056)