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~

全部评论

相关推荐

ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务