TP5模型关联

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

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

belongsTo是定义在关联模型从模型中,也是从模型对应的表一般都储存外键id,在关联模型属于从属关系

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

他们的所传入的参数都一样

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

第二个参数:外键字段名

第三个参数:主键名


//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');
    }
} 

2、hasMany(),belongsTo()区别

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

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

扫描二维码关注公众号,回复: 4749195 查看本文章

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

3、belongsMany的用法

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

belongsToMany传入参数:

第一个 参数:关联模型名

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

第三个参数:外键名

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

4、关联查询调用


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

5、常用模型操作

<?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 = '[email protected]';
        $user->mobile = '13888000000';
        // $user->aa = '12345';
        $user->save();

        // 插入操作
        $userArr['email']='[email protected]';
        $userArr['mobile']='13888000000';
        if($result =$user->create($userArr)){
            echo "用户id:{$result->id}邮件:{$result->email}手机{$result->mobile}";
        }

        // 批量新增
        $user = new User;
        $list = [
            ['email'=>'[email protected]','mobile'=>'12345'],
            ['email'=>'[email protected]','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'=>'[email protected]']);
        $user = User::where(['mobile'=>'12345','email'=>'[email protected]'])->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 = '[email protected]';
        if(false!==$user->save()){
           return '更新用户成功';
        }else{
            return $user->getError();
        }

        // 自己定义是数据更新操作
        $userArr['mobile']='12345';
        $userArr['email']='[email protected]';
        User::update($userArr,['user_id'=>1]);
        // 删除操作
        $user = User::get(2);
        $user->delete();
        // 或者使用
        User::destroy(3);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_33596574/article/details/81980395