Eloquentって何?
EloquentはSQLの文法をかかなくても、DBの操作が可能になるシロモノです。主にLaravel で使われてます。(らしいですね。)今回はLaravelではなく、PHP単体で使ってみましょう。
Eloquentの導入
まず、初めにでcomposer が入ってるか確かめよう。
composer -v
入ってなかったら、公式サイトでDlします。
ダウンロードできましたら、
composer require illuminate/database
を実行してでinstall します。DLしましたら、'comoser.json'と.'composer.lock'の二つのファイルがあるはずです。
データを取り出してみる
さて環境を整えたところでEloquentを使用してデータを取り出してみましょう。今までは
$pdo = new PDO('mysql:host=localhost; dbname=mydb; charset=utf8','root','');
$sql = 'SELECT * FROM players';
$statement = $pdo->prepare($sql);
$statement->execute();
$players = [];
while ($player = $statement->fetch(PDO::FETCH_ASSOC)) {
$players[] = $player;
}
$statement = null;
$pdo = null;
こう書いてましたよね。でもEloquentならこうなります。
始めにSQLの接続です。
$db = new Illuminate\Database\Capsule\Manager;
$db -> addConnection(
[
'driver' =>'mysql',
'host' => 'localhost',
'database' => 'mydb',
'username' => 'root',
'password' => 'root'
]);
はい、さっそくよくわからないものが出てきました。
1行目の new~~はpython でのimportに該当します。このメソッドを使用して、$db -> addConnection~~~とデータベースに接続します。
そして接続したものはどこからでも呼び出したいので
$db -> setAsGlobal(); //これで何処からでも取り出せる
$db -> bootEloquent();// ORマッパーの起動
こうします。
次にテーブルを呼び出してみましょう
class Player extends Illuminate\Database\Eloquent\model{
};
はい。何となくでextends~~でplayerってテーブルを呼び出した...と思われガチですが、実はここではクラス名の複数形が自動的にテーブル名になる仕様です。つまり、ここで呼び出されたのはPlayersってテーブルであり、Eloquent君は名前の末端から「S」を剥奪する湯婆婆みたいなやつです。
ちなみに名前の末端が「S」でないならEloquentの命名違反です。雇用すらされません。
テーブルを呼び出したので使ってみましょう。
$players = player::all();
はい、これで全部取り出します。ちなみに、
$players = player::select('*')->get();
と書いても取り出せますよ。
では、require_once~~ で別ページにアクセスします
require_once 'views/content.all.php';
--------##以下views/content.tpl.php----------------------
取り出し方はEloquentを使わない方法と変わりません。なので
<?php foreach ($players as $player) { ?>
<p>
<?= $player['id'] ?>,
<?= $player['name'] ?>,
<?= $player['level'] ?>,
</p>
<?php } ?>
はい。こんなものです。
データを取り出してみるー単体ー
続いて特定のデータのみを取得する方法です。取得方法として条件分岐であるWHEREをしましたよね?ここでも同様です。ただし、SQL文に書く必要はありません。
class Player extends Illuminate\Database\Eloquent\model{
};
これでテーブルを呼び出して、
$players = player::where('score','>=' , 100)->get();
これでscoreが5以上の物がデータとして取り出されます。
また、 = を使用する場合では
$players = player::where('score', 100)->get();
これでよく,更に、
$players = player::where('score', 5)->first();
とfirstを使う事でデータがある場合のみに使用できます。
--------##以下views/content.part.php----------------------
取り出し方は先ほどと同様にEloquentを使わない方法と変わりません。なので
<p>
<?= $player['id'] ?>,
<?= $player['name'] ?>,
<?= $player['level'] ?>,
</p>
はい。こんなものです。
参考文献
https://blog.bagooon.com/?p=1492