tp5.0笔记5:关联模型

欢迎加入laravel技术交流群 :784030154

前面笔记3说,数据库操作分为三个层次,前两个层次已经在笔记3进行汇总了,现将第三个层次进行了汇总如下

场景1:现有一个用户表,和一个书籍表,用户与书籍的关系是一对多,那么我们就可以利用tp5.0的提供的关联模型,内容如下

<?php
namespace app\index\model;
use think\Model;

class User extends Model{
    public function books(){ //方法名避免与user模型的字段属性重名
       return $this->hasMany('Book') ;
    }
}

在实际获取关联数据的时候,就是采用下面的方式

<?php
$user = User::get(5);
echo $user->niackname;
dump($user->books);
$user->books()->where('name','thinkphp')->find();

1、一对一关系

我们以用户与档案的一对一关联为例

<?php
namespace app\index\model;
use think\Model;

class User extends Model{
   //自定义自动写入的属性
   protected $insert = ['status'=>1];
   //自动写入时间戳
   protected $autoWriteTimestamp = true;
   //定义关联方法
   public function profile(){

     return $this->hasOne('Profile','user_id','id');
   }
}
hasOne('关联模型名','关联外键','主键','别名定义','join类型');

默认关联模型的外键是:当前模型名_id ,如果外键名符合规范,直接传入模型名即可

通常关联模型与当前模型在同一命名空间,若不在同一命名空间下,则传入命名空间一并传入

 return  $this->hasOne('\app\admin\Profile');

要进行模型的关联操作,我们必须同时定义好关联模型

<?php
namespace app\index\model;
use think\Model;

class Profile extends Model{
    protected $type = [
       'birthday'=>'timestamp',
    ];
    public function user(){             //如果所有的关联操作都是基于User模型,user方法无需定义
        return $this->belongsTo('User');//当前的模型所对应的表、存在与user的关联外键(user_id),属从属关系,那么就用belongsTo(),否则使用hasOne()
    }
}

belong

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值