前回の記事では、ルーティングとコントローラ、ビューの設定まで行って、画面を表示するところまで進みました。今回はさらに踏み込み、DBに接続して、テーブルからデータを取得し一覧表示するところまで実装します。
より伝わりやすくするためにできるだけシンプルにしたいため、モデルは使わずSQLを直接書く構成で進めます。
データベース作成
XAMPPを使用してMySQLにDBを作成し(DB名はtestとします)、テスト用(ユーザマスタ)テーブルを作成します。
(XAMPPのインストール等については他の方の記事をご参考ください。わかりやすい記事がたくさん出てくると思います。)
| カラム名 | 型 | 備考 |
| id | int | autoincrement(自動採番) |
| user_nm | varchar(50) | nullable(NULLを許容する) |
| age | int | nullable(NULLを許容する) |
テーブル名は「ac_m_user」とします。
今回はサンプルなので、管理ツールやSQLから手作業でユーザ情報を登録しておきます。
DB接続設定
次に、Codeigniter側でDBの接続設定を編集します。
ファイルは「Config/Database.php」です。
以下の設定を確認、または修正します。
public array $default = [
'DSN' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'test', // DB名
'DBDriver' => 'MySQLi',
//~~~~省略~~~~
'foundRows' => false,
'dateFormat' => [
'date' => 'Y-m-d',
'datetime' => 'Y-m-d H:i:s',
'time' => 'H:i:s',
],
];
ここが正しく設定できていれば、CodeIgniter側からDBに接続できるようになります。
コントローラを修正
続いてコントローラです。
今回は前回作成したTestControllerとTestControllerが継承しているBaseControllerに処理を追加していきます。
継承とは簡単に言うと、TestControllerを動かすと継承もとのBaseControllerの処理も走るよって感じです。
なのでまず、BaseControllerにDB接続処理を追加していきます。
protected $db; // ←追加 protectedとするとこの変数を継承先のControllerでも使用できるようになります。
/**
* @return void
*/
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
// Do Not Edit This Line
parent::initController($request, $response, $logger);
// Preload any models, libraries, etc, here.
$this->db = Database::connect(); // ←追加 クラス変数なので書き方は「$this->db」
// E.g.: $this->session = service('session');
}
次に、TestControllerです。
public function index()
{
// SQLを書いて変数.queryに格納
$query = $this->db->query("SELECT * FROM AC_M_USER ORDER BY ID");
$userList = $query->getResultArray();
// getResultArray()とするとSQLを実行し、連想配列の形で返してくれます。
return view('test', [
'userList' => $userList,
// ビューには第二引数を配列として渡す。ここのキーがViewで使うときの変数名になります。
]);
}
ビューで一覧を表示する
最後にビューを作成します。
ビューについても前回作成したtest.phpを使用します。シンプル構成にしたいのでCSSは度外視してます。
<body>
<h1>ユーザ一覧</h1>
<table border="">
<thead>
<tr>
<td>ID</td>
<td>ユーザ名</td>
<td>年齢</td>
</tr>
</thead>
<tbody>
<?php foreach($userList as $user): ?>
<tr>
<td><?= $user['id']; ?></td>
<td><?= $user['user_nm']; ?></td>
<td><?= $user['age']; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</body>
コントローラで渡した「userList」をforeachでループして1行ずつ出力するだけのシンプルな仕組みです。
ルーティングの設定
ルーティングは前回同様の設定値で変わりなしなので早速、ブラウザでhttp://localhost/testにアクセスしてみましょう。XAMPPでApacheとMySQLの起動は忘れずに。。
まとめ
今回はDBからデータを取得し、画面に一覧表示させるところまでまとめました。
- DB設定を
Config/Database.phpで実施 - ControllerでSQLを直接発行
- Viewでforeachして表示
まずは「動かす」ところまで到達できれば大きな前進だと思います。
特にプログラムも初めてでフレームワークも初めてでという方は今必要ない情報がたくさん入ってくるとこんがらがりますからね。
必要な時に必要な分だけの知識を入れていけばいいと思います。低いハードルをたくさん超えていきましょう。
次の段階では、新規登録から更新処理ぐらい?をまとめていこうと思います。
