ThinkPHP3.23的关联模型是很好用的技巧,使用它能使你的代码更加精简,它包括三种关联关系:一对一(HAS_ONE,BELONGS_TO),一对多(HAS_MANY),多对多(HAS_TO_MANY)。
这里讲解第一种“一对一”的关联模型,其分为两种。
1,HAS_ONE
HAS_ONE关联表示当前模型拥有一个子对象,例如,每个员工都有一个对应的人事档案,每篇小说文章都有一个对应的书名。我们可以建立一个文章模型BookArticleModel,并且添加如下关联定义:
<?php
namespace Admin\Model;
use Think\Model\RelationModel;
/**
* 文章模型
*/
class BookArticleModel extends RelationModel
{
public $_link = array(
'book_id' => array(
'mapping_type' => self::BELONGS_TO,// 关联类型
'class_name' => 'Book',// 关联数据表
'foreign_key' => 'book_id', //关联外键名
'mapping_fields' => 'book_id,title', // 需要查询的关联字段名称
)
);
然后在写文章控制器ArticleController
<?php
namespace Admin\Controller;
/**
* 文章管理
*/
class ArticleController extends CommonController
{
// 文章列表
public function index(){
$res = D('BookArticle');
$data = $res->relation('book_id')->Select();// 只关联一个表用具体字段relation('book_id')
dump($data); exit();
}
}
视图显示效果为
array(7) {
[0] => array(7) {
["article_id"] => string(1) "1"
["book_id"] => array(2) {
["book_id"] => string(1) "1"
["title"] => string(12) "超品巫师"
}
["title"] => string(26) "第一章 我不是道士"
["addtime"] => string(10) "1546260252"
["edittime"] => string(10) "1549984633"
["status"] => string(1) "0"
["count"] => string(4) "7174"
}
....
2,BELONGS_TO
Belongs_to 关联表示当前模型从属于另外一个父对象,例如每个用户都属于一个部门,每篇小说文章都属于一本小说。用法和效果同上,我们只需更改如下模型中的关联定义。
'book_id' => self::BELONGS_TO