TP5模型关联

1.belongsTo()、hasOne()的区别php

在定义一对一关联模模型方法时,对其有疑惑不知道该定义哪一个:web

belongsTo是定义在关联模型从模型中,也是从模型对应的表通常都储存外键id,在关联模型属于从属关系数据库

hasOne 是定义在主模型中,在关联模型中属于主关系,没有储存外键idapi

他们的所传入的参数都同样数组

第一个参数:关联模型的名称app

第二个参数:外键字段名svg

第三个参数:主键名this

//User
<?php
namespace app\api\model;
use think\Model;

class User extends Model{
    public function profile(){
        return $this->hasOne('Profile','user_id','id');
    }
}

//Profile
<?
namespace app\api\model;
use think\Model;

class Profile extends Model{
    public function user(){
        return $this->belongsTo('User','user_id','id');
    }
}

二、hasMany(),belongsTo()区别spa

这两个方法用于一对多的关联模型code

hasMany和上面的hasOne同样,定义于主模型中,没有外键id的表的对应模型中

belongsTo与上面同样,定义在从模型中,储存外键id的表的对应模型中

三、belongsMany的用法

用于一对多的关联模型的主、从两个模型中。

belongsToMany传入参数:

第一个 参数:关联模型名

第二个参数:中间表名(含表前缀)

第三个参数:外键名

第四个参数:当前模型关联键名

四、关联查询调用

UserModel::with('book,profile')->select();其中的book,profile均为userModel的关联方法名,均与User有直接关系
user->book
user->profile
UserModel::with(['book','book.comment.']);其中book为userModel的关联方法名,comment是book的关联方法名, user->book->comment

五、经常使用模型操做

<?php namespace app\index\controller; use think\Controller; use app\index\model\User; use app\index\model\UserLevel; class index2 extends Controller { public function index(){ $a = User::get(1); print_r($a); /*$b = UserLevel::get(1); print_r($b);*/ // 插入操做 $user = new User; $user->email = '13@qq.com'; $user->mobile = '13888000000'; // $user->aa = '12345'; $user->save(); // 插入操做 $userArr['email']='13@qq.com'; $userArr['mobile']='13888000000'; if($result =$user->create($userArr)){ echo "用户id:{$result->id}邮件:{$result->email}手机{$result->mobile}"; } // 批量新增 $user = new User; $list = [ ['email'=>'123@qq.com','mobile'=>'12345'], ['email'=>'234@qq.com','mobile'=>'23456'] ]; if($user->saveAll($list)){ echo '用户批量新量成功'; } // 查询数据 $user = User::get(1); // 返回一个对象 echo $user->email; echo '<br/>'; echo $user->mobile; // 由于实现了 \ArrayAccess接口,能够将对象象数组同样访问 $user = User::get(2); echo $user['email']; echo $user['mobile']; // 根据某个条件查询数据 getByXxx()方法 $user = User::getByMobile('12345'); $user = User::get(['mobile'=>'12345','email'=>'123@qq.com']); $user = User::where(['mobile'=>'12345','email'=>'123@qq.com'])->find(); echo $user['mobile']; // 若是要查询多个数据,能够使用模型的all方法 $list = UserLevel::all(); $list = UserLevel::all(['level_id'=>4]); $list = UserLevel::where('level_id','<=',3)->select(); foreach($list as $v){ echo 'id:'.$v->level_id; echo '==等级名称:'.$v->level_name; echo '<br/>'; } // 对于数据库查询出来的数据更新数据 $user = User::get(1); $user->mobile = '98876'; $user->email = 'hello@qq.com'; if(false!==$user->save()){ return '更新用户成功'; }else{ return $user->getError(); } // 本身定义是数据更新操做 $userArr['mobile']='12345'; $userArr['email']='33@qqc.om'; User::update($userArr,['user_id'=>1]); // 删除操做 $user = User::get(2); $user->delete(); // 或者使用 User::destroy(3); } }