thinkphp5.1框架关联模型一对一查询,同时搜索基础表字段值和关联表字段值(用作条件搜索)

描述:模型一对一关联查询,一次查询6张表数据,主表student_id关联基础表id,小学表student_id,初中表student_id,离校工作表student_id,离校学习表student_id,搜索条件有主表中字段,也有关联表中字段(我这边是基础表字段),可以用以下方法查询。

一.模型代码

class StudentSenior extends Model
{
    //关联基础表模型
    public function students(){
        return $this->belongsTo('Student', 'student_id', 'id');
    }
    //关联离校学习表模型
    public function study(){
        return $this->belongsTo('LeaveStudy', 'student_id', 'student_id');
    }
    //关联离校工作表模型
    public function work(){
        return $this->belongsTo('LeaveWork', 'student_id', 'student_id');
    }

    //关联小学表模型
    public function primary(){
        return $this->belongsTo('StudentPrimary', 'student_id', 'student_id');
    }
    //关联初中表模型
    public function junior(){
        return $this->belongsTo('StudentJunior', 'student_id', 'student_id');
    }
}

二.控制器代码

1.grade_id,classes_id两个字段在主表中(senior模型)
2.idcard,name两个字段在关联表student中(student模型)
3.最重要的:我尝试了很多次,最后总结出结果,with()方法和where()一定要放后面,hasWhere()方法一定要放前面,否则报错。
public function student_all(Request $request)
    {
        //搜索条件
        $where = [];
        $hasWhere = [];
        //年级
        if (isset($_GET['grade_name'])) {
            $where['grade_id'] = $_GET['grade_name'];
        }
        //班级
        if (isset($_GET['classes_name'])) {
            $where['classes_id'] = $_GET['classes_name'];
        }     
        //身份证
        if (isset($_GET['idcard'])) {
            $hasWhere['idcard'] = $_GET['idcard'];
        }
        //姓名
        if (isset($_GET['name'])) {
            $hasWhere['name'] = $_GET['name'];
        }
        //去空
        $where = array_filter($where);
        //关联查询小学,初中,高中,离校学习,离校工作表
        $data = SeniorModel::hasWhere('students',$hasWhere)->with('students,primary,junior,study,work')->where($where)->paginate(10);
        return json_encode($data);
    }
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、前期概要 1.1 名词解释 关系:事物之间相互作用、相互联系的状态。 关联:名词:表示对象(数据库表)之间的关...
    唯老阅读 1,100评论 0赞 4
  • 1模型设计部分参数 1.1迁移表中db_table 指定db_table参数,表示模型迁移时,映射到数据库中的表名...
    barriers阅读 523评论 0赞 0
  • 2.5 数据表查询操作 学习目标 能够熟练对数据表进行各种查询操作 -----------------------...
    Cestine阅读 478评论 0赞 0
  • Eloquent: 关联模型 简介 数据库中的表经常性的关联其它的表。比如,一个博客文章可以有很多的评论,或者一个...
    Dearmadman阅读 17,564评论 6赞 16
  • 安装 元素数据存储选择 默认使用derby数据库,不能够多个用户同时使用,多用于测试使用MySQL数据库存储元数据...
    BlackChen阅读 505评论 0赞 1

友情链接更多精彩内容