在開發過程中會遇到多表關聯查詢的情況,這次使用三個表做關聯查詢
表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);
查詢結果: