0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

EloquentでSQLを使用せず、データを取得する方法

Last updated at Posted at 2025-05-09

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

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?