TP6关于hasOne的用法
![](https://img2023.cnblogs.com/blog/1033667/202302/1033667-20230210101819909-1727943811.png)
实际操作中看如下案例
文章分类表:
CREATE TABLE `case_category` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id', `name` varchar(50) DEFAULT NULL COMMENT '分类名称', `num` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '分类排序', `status` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '分类状态(0=隐藏,1=显示)', `create_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT='展厅展馆案例分类表';
文章案例表:
CREATE TABLE `cases` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id', `cover` varchar(255) DEFAULT NULL COMMENT '封面图片', `title` varchar(255) DEFAULT NULL COMMENT '标题', `title_en` varchar(255) DEFAULT NULL COMMENT '标题英文翻译', `author` varchar(50) DEFAULT NULL COMMENT '作者', `address` varchar(255) DEFAULT NULL COMMENT '地址', `address_en` varchar(255) DEFAULT NULL COMMENT '地址英文翻译', `area` varchar(50) DEFAULT NULL COMMENT '面积', `area_en` varchar(50) DEFAULT NULL COMMENT '面积英文翻译', `content` text COMMENT '内容', `case_category_id` bigint(20) DEFAULT NULL COMMENT '案例分类关联id', `status` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '状态(0=隐藏,1=显示)', `create_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=25 DEFAULT CHARSET=utf8 COMMENT='展厅展馆案例表';
需求:查询文章列表以及分类详细信息
创建两个模型层:CasesModel、CaseCategoryModel,然后在文章模型层写进行查询操作:
主要查询的是案例,所以在案例的模型层写查询代码,又因为案例表只有关联id,所以hasone的关联要放在案例表模型中:
<?php namespace app\common\model\mysql; use think\Model; class CasesModel extends Model { protected $table = 'cases'; /** * 根据案例分类进行分页查询列表 */ public function get_cases_lists_by_category($start, $limit, $type){ return $this->with(['cases_category'])->select(); } /** * 展厅展馆案例分类表关联 */ public function casesCategory(){ return $this->hasOne(CaseCategoryModel::class,'id','case_category_id'); } }
这样查询的结果是:
如果要查询指定字段,那么可以可以改成如下:
/** * 展厅展馆案例分类表关联 */ public function casesCategory(){ return $this->hasOne(CaseCategoryModel::class,'id','case_category_id')->bind(['name','cid'=>'id']); }
这样的话,查询结果是如下的结构:
关于hasone的解释:
return $this->hasOne(要关联的那个模型层名称::class,'要关联的那个模型层的主键id','当前模型代表的这张表的关联id')->bind(['字段1名称','别名'=>'字段2名称']);
通往牛逼的路上,在意的只有远方!