我只是想问一下如何在CodeIgniter 4上使用INNER JOIN函数?我正在尝试将下面的SQL语句转换为CodeIgniter 4,但由于我只是这方面的新手,我发现这很困难。
SELECT l.l_id, u.fname, u.mname, u.lname, u.dept, u.user_type, u.u_grdsec, e.e_name, l.date_added, DATE(l.date_added), date_format(l.date_added, '%H:%i') as 'time'
FROM logs l INNER JOIN users u ON l.u_id = u.u_id
INNER JOIN establishment e ON l.e_id = e.e_id
WHERE DATE(l.date_added) = '$rep_date'
GROUP BY
date_format(l.date_added, '%H:%i'), l.u_id
ORDER BY l.date_added ASC";
当我研究的时候,我找到了这个方法。但是,我不知道我该怎么把WHERE,GROUP BY和ORDER BY子句放在那里。
$builder = $this->db->table("logs as l");
$builder->select('l.l_id, u.fname, u.mname, u.lname, u.dept, u.user_type, u.u_grdsec, e.e_name, l.date_added, DATE(l.date_added), date_format(l.date_added, "%H:%i") as "time"');
$builder->join('users as u', 'l.u_id = u.u_id');
$builder->join('establishment as e', 'l.e_id = e.e_id');
$data = $builder->get()->getResult();
另一件让我困惑的事情是我不知道我应该把它放在哪里,我不知道我应该把它放在Controller
还是Model
文件中。
到目前为止,这是我的控制器上的代码。
public function getLogs(){
helper(['form']);
$model = new LogsMod();
$rep_est = $this->request->getPost('rep_est');
$rep_date = $this->request->getPost('rep_date');
$data['logs_data'] = $model->where('DATE(l.date_added)', $rep_date)->groupBy(date_format(l.date_added, '%H:%i'), l.u_id)->orderBy('l.date_added', 'ASC')->findAll();
return view()->to('LogsReport', $data);
}
这是我的模型上的代码。
public function getLogs(){
$builder = $this->db->table("logs as l");
$builder->select('l.l_id, u.fname, u.mname, u.lname, u.dept, u.user_type, u.u_grdsec, e.e_name, l.date_added, DATE(l.date_added), date_format(l.date_added, "%H:%i") as "time"');
$builder->join('users as u', 'l.u_id = u.u_id');
$builder->join('establishment as e', 'l.e_id = e.e_id');
$data = $builder->get()->getResult();
}
但是,我不认为这两者有联系。
1条答案
按热度按时间6rvt4ljy1#
CodeIgniter 4模型本身就是构建器。
在扩展CodeIgniter\Model的类中。在函数中构建查询时,只需使用$this即可引用构建器。因此,您的函数可能如下所示:
where()方法接受键值数组或变量/字符串对:
其中key 1和key 2是数据库表字段。
请注意,在控制器中,应该使用model()函数示例化模型对象: