只是想問一下如何在 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();
}
但是,我不認為這兩者有聯系。
uj5u.com熱心網友回復:
CodeIgniter 4 模型本身就是構建者。您可以使用類變數指定 db 表
protected $table = '<your table>';
在擴展 CodeIgniter\Model 的類中。在函式中構建查詢時,您可以簡單地使用 $this 來參考構建器。所以你的函式可能看起來像這樣:
public function getLogs(){
$this->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"');
$this->join('users as u', 'l.u_id = u.u_id');
$this->join('establishment as e', 'l.e_id = e.e_id');
$this->where(...);
$this->orderBy(...);
return $this->findAll();
}
where() 方法接受鍵值陣列或變數/字串對:
$this->where(['key1' => 'value1','key2' => 'value2' ]);
// or
$this->where('key1', 'value1');
$this->where('key2', 'value2');
其中 key1 和 key2 是您的資料庫表欄位。
請注意,在您的控制器中,您應該使用 model() 函式實體化您的模型物件:
$model = model(LogsMod::class);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/469014.html
