ThinkPHP5.1 中的联表查询(下)

此时我们先创建出这个Dao

<?php
namespace app\dao;
class StudentDao{

}

然后再构建这个复杂的数据模型

    //构建复杂的数据模型
    private function getRamodel(){
        $model = app()->make(Student::class);
        $classModel = app()->make(Clas::class)->getName();
        $hobbyModel = app()->make(Hobby::class)->getName();
        
        return $model->alias('s')
        ->join($classModel . ' ' . 'c', 's.class_id =c.id', 'LEFT')
        ->join($hobbyModel . ' ' . 'h', 'h.student_id =s.id', 'LEFT')
        ;
    }

然后就可以指定数据获取的方法

    public function getList($where){
        $obj = $this->getRaModel();

        return $obj->where($where)->select();
    }

然后上层就可以进行数据拉取了

        $data = app()->make(StudentDao::class)->getList([]);

        return json($data);

这是中大型项目提取复杂数据模型非常重要的一个思路,创建完成的复杂数据模型可以在多端通用。而且保证每一端拉取的数据结构都是相同的

下面我们继续完成上面的那个需求

指定需要查询的数据字段

$fileld = 's.name as stu_name,s.age as stu_age,c.name as cla_name,h.name as hob_name';

拉取到数据

image.png 补充where的查询条件

        $where = [            ['c.name','=','小二班'],
            ['s.age','>',5],
            ['h.name','=','画画'],
        ];

完整的dao的代码如下:

<?php
namespace app\dao;

use app\model\Hobby;
use app\model\Student;
use app\model\Clas;

class StudentDao{

    private function getRamodel(){
        $model = app()->make(Student::class);
        $classModel = app()->make(Clas::class)->getName();
        $hobbyModel = app()->make(Hobby::class)->getName();
        
        return $model->alias('s')
        ->join($classModel . ' ' . 'c', 's.class_id =c.id', 'LEFT')
        ->join($hobbyModel . ' ' . 'h', 'h.student_id =s.id', 'LEFT')
        ;
    }

    public function getList(){
        $fileld = 's.name as stu_name,s.age as stu_age,c.name as cla_name,h.name as hob_name';
        $where = [
            ['c.name','=','小二班'],
            ['s.age','>',5],
            ['h.name','=','画画'],
        ];

        $obj = $this->getRaModel();
        return $obj->field($fileld)->where($where)->select();
    }
}

controller或者是service中进行调用

<?php
namespace app\index\controller;

use app\dao\StudentDao;

class Index
{
    public function index()
    {
        $data = app()->make(StudentDao::class)->getList([]);

        return json($data);
    }
}

码字不易,每一句话,每一个字都是修修改改的,但愿对你有所帮助。Bye~

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-27 15:07
点赞 评论 收藏
分享
头顶尖尖的程序员:我也是面了三四次才放平心态的。准备好自我介绍,不一定要背熟,可以记事本写下来读。全程控制语速,所有问题都先思考几秒,不要急着答,不要打断面试官说话。
点赞 评论 收藏
分享
认真搞学习:28小登的建议,投算法岗不要写什么物理竞赛,互联网+,多写点项目,用什么算法做了什么。还有本科算法是不可能的开发你这个也没有项目啊
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-30 18:19
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务