欢迎加入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