【PHP】thinkphp6远程一对一hansOneThrough使用,白话文参数解释

/**
     * HAS ONE 远程关联定义
     * @access public
     * @param  string $model      模型名
     * @param  string $through    中间模型名
     * @param  string $foreignKey 关联外键
     * @param  string $throughKey 关联外键
     * @param  string $localKey   当前主键
     * @param  string $throughPk  中间表主键
     * @return HasOneThrough
     */
    public function hasOneThrough(string $model, string $through, string $foreignKey = '', string $throughKey = '', string $localKey = '', string $throughPk = ''): HasOneThrough
    {
        // 记录当前关联信息
        $model      = $this->parseModel($model);
        $through    = $this->parseModel($through);
        $localKey   = $localKey ?: $this->getPk();
        $foreignKey = $foreignKey ?: $this->getForeignKey($this->name);
        $throughKey = $throughKey ?: $this->getForeignKey((new $through)->getName());
        $throughPk  = $throughPk ?: (new $through)->getPk();

        return new HasOneThrough($this, $model, $through, $foreignKey, $throughKey, $localKey, $throughPk);
    }

源码长这样,但是参数注释中的模型名,中间模型,关联外键等一系列名词不容易理解到底该填什么,默认的外键和关联外键命名规则是 当前模型名+_id,实际项目中关联键的名称可能并没有这么理想。笔者做了无数次远程一对一/远程一对多之后仍然记不住这几个参数的意思,终于决定使用文章记录下来,方便自己也方便他人使用。

先看使用场景

表assess_effect_advisor  表1

表assess_effect  表2

表company_info  表3

表1为主表,希望通过表2,查出表3的数据

主要关系字段已用红圈标注出来了,3张表的关系是,表1字段assess_effect_id关联表2 id, 表2 compnay_id关联 表3 id

hasOneThrough的参数写法应该如下

public function assessCompany(){
        /* 用白话文讲6个参数意思,注意参数3,5配对  参数4,6配对
         * 参数1,我最终需要获取的那张表的模型
         * 参数2,我需要使用到的中间表模型
         * 参数3,中间表与主表相等的字段 (本例为id=assess_effect_id)
         * 参数4,目标表与中间表相等的字段 (本例为company_id=id)
         * 参数5,主表与中间表相等的字段 (本例为id=assess_effect_id)
         * 参数6,中间表与目标表相等的字段 (本例为company_id=id)
         * */
        return $this->hasOneThrough(CompanyInfo::class,AssessEffect::class,'表2.id','表3.id','表1.assess_effect_id','表2.company_id');
}

不知道这样解释是否能更明白一些,如果能帮助到其他人是我莫大的荣幸。如果有帮到你,就帮我点个赞吧

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值