之前项目都是直接在控制器里面写JOIN查询的,这次项目试了下用关联模型,踩了很多坑,记录一下。
主表模型如下:
class Members extends Model{
//关联用户信息表
public function MembersShopInfo(){
//uid为MembersShopInfo字段,ID为Members表自增ID
return $this->hasOne('MembersShopInfo','uid','id');
}
//用户列表
public function get_members_list($search){
$page = (isset($search['page']) && (int)trim($search['page'])) ? (int)$search['page'] : 1;
$limit = (isset($search['limit']) && (int)trim($search['limit'])) ? (int)$search['limit'] : $this->limit;
$where['Members.is_del'] = 0; //主表搜索条件要加表前缀
$res = $this->haswhere('MembersShopInfo',['dealer_id'=>$search['dealer_id']])
->with('MembersShopInfo')
->where($where)
->limit($limit*($page - 1),$limit)
->order('id DESC')->select();
return $res;
}
}
关联表模型文件必须有,内容可以是空的。
haswhere里第一个参数填关联的表,第二个参数填关联表的条件参数。(不用加表名前缀)
where里写主表的查询条件。(要加表前缀)
另外 haswhere写在with后面的话会报错
method not exist:think\db\Query->haswhere
写在with前面就能正常使用了。