ThinkPHP5中模型中的一对一,并予以实例说明。

这里我们要清楚一点的是模型层的是来做什么用的,是用来处理业务逻辑的地方,控制层是用来控制业务逻辑的地方,模型的好处个人认为它能够自动加载数据,所谓的增删改查,他都能够通过关联处理多张表,软删除等一系列操作。那thinkPHP5中的模型到底有些什么啦,这里我们选用看云官方手册里面的一张图来表示。

 模型的方便在什么地方啦,举个列,我们在写一个项目的时候时常有些地方的某些类型是通过状态值来表示的,存的都是int类型的对不对,(0,1,2这样的),而实际上,前端又需要我们返还给他真正对应的含义,这个时候模型的里面的获取器就非常有用了。仅仅只需要在模型中进行一些定义,拿出来的数据就自动做了转换,这里我们就不再详细概述了,大家可以去看手册下的模型菜单下的获取器章节,切记一定用自己动手加深映像。下面我们进入今天的正题。模型中的一对一关联。其实程序中的表并非一开始并非是直接动手通过Navicat或者什么工具建表出来的,而是通过ER图,通过图形反应某张表与某张表之间的关系来的再建立相应的表,通过外键关联而来。那么我们再回头看看什么是一对一关联。首先我们本地新建一个数据库命名为tp5model,在这个库下面新建一张表为member。如下图所示:

填入下面的内容。

再建立一张表为profile表(个人信息表),如下图所示。

填入一些信息:

 这里我们需要知道,在设定之处我们认为,每一个用户只能够拥有一个个人信息,所以member对于profile表之间的关系应当是1对1的关系(也就是一个用户对应一个个人信息),下面我们开始在模型里面进行关联。

我们首先使用hasOne()方法进行关联。这里需要猪with()方法取出关联的数据,再通过控制层调用模型方法取出数据。像下面这样。

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/8/24 0024
 * Time: 00:10
 */

namespace app\index\model;


use think\Model;

class Member extends Model
{

    public function profile(){
        //hasOne()方法中第一个为关联的模型名称,第二个为关联的外键,
        //所以这里分别是Profile模型和profile_id外键
        return $this->hasOne('Profile','profile_id');
    }

    public function Memberdata(){
        $Member=new Member();
        $data=$Member->with('profile')->select();
        return $data ;
    }

}

 

控制层代码如下:

<?php
namespace app\index\controller;

use app\index\model\Member;
use think\Controller;

class Index extends Controller
{
    public function index()
    {

        $MemberData=model('Member');
        $data=$MemberData->Memberdata();
        return json($data);

    }
}

最后是我们页面的效果,如下图所示。

 如果只想输入某些字段内容只需要加入field()方法过滤掉即可。

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/8/24 0024
 * Time: 00:10
 */

namespace app\index\model;


use think\Model;

class Member extends Model
{

    public function profile(){
        //hasOne()方法中第一个为关联的模型名称,第二个为关联的外键,
        //所以这里分别是Profile模型和profile_id外键
        return $this->hasOne('Profile','profile_id');
    }

    public function Memberdata(){
        $Member=new Member();
        $data=$Member->with('profile')->field('id,username')->select();
        return $data ;
    }

}

效果如下:

最后由于模型中有关联预载入,大数据量很大的时候,他比jion()方法加载的更加的快速,无论是LeftJion还是RightJion或者InnerJion,所以推荐大家还是多使用模型。今天这篇重写模型的一对一就先到这儿了。下次重新讲解模型的一对多,好梦各位。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值