直接添加一个where条件,然后条件里面用表名.字段即可,非常方便
需要注意的一点是在fastadmin里面,$this->auth->getGroupIds()这样获取是会获取到缓存里面的值,必须重新登录之后才可以得到最新的用户组,这个问题导致困扰了我一晚上
php
$usage = $this->model
->with(['user', 'device', 'devicetype']);
if (in_array(3, $this->auth->getGroupIds()) || in_array(5, $this->auth->getGroupIds())) {
//用户角色为业务员或者销售经理时,只显示所在区域的设备
$usage->where('user.area_id', 'in', $this->auth->area_ids);
}
$list = $usage
->where($where)
->order($sort, $order)
->paginate($limit);
上面这些在后台管理系统里面是有作用的,但是前端的api接口确没起到效果,不知为何
前端api我使用join查询,添加条件
with查询的原理:其实是主查询查询出数据只是,再把查出的所有的xxx_id都拿出来,单独用in查询查询出一个列表,然后把主查询得到的列表与with得到的列表直接合并,所以with不会影响主查询,主查询该怎么查还是怎么查就行了
php
$list = \app\common\model\Materialrecord:: alias('r')
->with('material')
->join('materials m', 'r.material_id = m.id')
->where('r.batch_id', $batch_id)
->order('r.addtime desc')
->select();