THINKPHP6 使用一對多對多關聯查詢


在開發過程中會遇到多表關聯查詢的情況,這次使用三個表做關聯查詢
表1:rate              
表2:rate_acfee
表3:rate_acfee_info
表1的一條數據對應着表2的多條數據,表2的一條數據對應着表3的多條數,使用方法如下
表1模型Rate:

/**
 * 費率Model
 * Class Producer
 * @package app\model\Producer
 */
class Rate extends BaseModel{
    use ModelTrait;
    use SoftDelete;
    protected $name = 'rate';
    /**
     * 數據表主鍵
     * @var string
     */
    protected $pk = 'id';
    /* 
    *開啟軟刪除
    */
    protected $createTime = 'add_time';
    protected $deleteTime = 'delete_time';
    protected $updateTime = 'update_time'; 

    public function rateAcfee(){
        return $this->hasMany('RateAcfee','rate_id','id');          //rate_id 為表2(關聯表1主鍵字段) id 為表1主鍵
    }
}

表2模型RateAcfee:

/**
 * Model
 * Class RateAcfee
 */
class RateAcfee extends BaseModel{
    use ModelTrait;
    //use SoftDelete;
    protected $name = 'rate_acfee';
    /**
     * 數據表主鍵
     * @var string
     */
    protected $pk = 'id';
    protected $createTime = 'add_time';
    public function times(){
        return $this->hasMany('RateAcfeeInfo','fee_id','id'); // RateAcfeeInfo為表3模型, fee_id為表3(關聯表2主鍵字段)id 為表2主鍵
} }

接下來就可以來使用控制器或是模型寫方法進行連貫三表查詢:

	$model = new Rate;
        $list = $model->with(['rateAcfee.times' => function($query) {   // .times 查詢表3的關鍵 
            $query->order('id');
        }])->select();
        return json($list);    

查詢結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM