PHPでSQL書かずにDB操作🎉 「Eloquent」モデルを使ってみた！！

# 解説動画も用意しました
https://youtu.be/zkNCXvDj4GM

# 今回試した環境
- Windows,11
- XAMPP
- PHP Version 8.1.4
- Composer version 2.0.14
  Composerは必須なので、こちらからダウンロードしてインストールしてください。
https://getcomposer.org/download/
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/5b4b11d3-8368-06ed-90b5-7c3247983fb3.png" width="800">

**⇧Windowsの場合は上記赤枠のリンクからDownload可能です⇧**
　※Macの方はコマンドになります、別記事を参照していただければと存じます。


### １．用意した/Usersテーブル （テスト例）
以下、カラム構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/a785304a-3f4e-f561-cb2c-d2eda84df0e3.png)

### 2．HTML表示結果
まずは上記テーブルをそのままシンプルに表示を目指す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/a06a5d4e-5e7a-5754-9589-7ee12561fef5.png)


# Eloquentをダウンロード
### 1．Download
作業フォルダ内で以下コマンドを打ちます
```php
composer require illuminate/database
```
以下のようにファイルとフォルダがダウンロードできます。
（VSCodeでフォルダを開いたところをスクリーンショットしました）
![スクリーンショット 2022-12-22 172432.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/5bd1afbd-fca4-2b59-2d0b-5b59df4af670.png)



### 2．DB接続を関数にしてみた（とりあえずスグに使ってみたいから）
以下DB名とuser/Passwordは各々の環境に合わせて変更が必要
```php:db.php
function db_conn(){
  require_once 'vendor/autoload.php';
  $db = new Illuminate\Database\Capsule\Manager;
  //**↓↓↓ここがDB接続設定↓↓↓**
  $db->addConnection([
      'driver'    => 'mysql',
      'host'      => 'localhost',
      'database'  => '**DB名**',
      'username'  => 'root',
      'password'  => '',
      'charset'   => 'utf8',
      'collation' => 'utf8_unicode_ci',
      'prefix'    => '',
  ]);
  //**↑↑↑ここがDB接続設定↑↑↑**
  $db->setAsGlobal();
  $db->bootEloquent();
}
```



### 3．Modelからデータを取得表示してみた！（とりあえずスグに使ってみたいから）

```php:demo.php
<?php
require_once "db.php"; //上記のdb.phpを読み込む
db_conn();             //DB接続

//Userクラス**↓↓↓ このクラスはusersテーブルに紐づきます ↓↓↓**
class User extends Illuminate\Database\Eloquent\Model {
    public $timestamps = false; //created_at,updated_at,無効
}
//データ取得例
$users = User::all(); //全て表示
?>

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>PHP-Eloquent</title>
</head>
<body>
<table>
<?php 
    foreach($users as $user) {
?>
    <tr>
        <td><?=$user->id?></td>
        <td><?=$user->name?></td>
        <td><?=$user->lid?></td>
    </tr>
<?php
    }
?>
</table>
</body>
</html>

```
↓ usersテーブル👉Userクラスという仕組み ↓
・例えば「 itemsテーブル👉Itemクラス 」
・例えば「 booksテーブル👉Bookクラス」
Laravelとかもそうですね！これを使うとLaravel学ぶ時にmodel周りがスッと入ってきやすいかなと思いました。
```php:上記のUserクラス
//Userクラス**↓↓↓ このクラスはusersテーブルに紐づきます ↓↓↓**
class User extends Illuminate\Database\Eloquent\Model {
    public $timestamps = false; //created_at,updated_at,無効
}
```


### 4．うわ～～マジでSQL書かずに動いた！
PHPでこれが使えたらマジで楽になる。
Valitronでバリデーション、DBはEloquent。
簡単にプロトタイプ作るには良いな～～～～
※SQLの基本はしっかり勉強しましょう！これとは別に必要なスキルです

### 5. 登録、削除もLaravel同様に書けました。当たり前か・・・
```php:demo.php
//データ登録
$user = new User();
$user->name = "yamazaki";
$user->lid  = "test01";
$user->save();
```

```php:demo.php
//データ更新
$user = User::find(1);  //id=1のnameを更新
$user->name = "yamazaki";
$user->save();
//updateメソッドの更新では「update_at」カラムを更新しようとするのですが、今回はが無いのでsaveで更新
```

```php:demo.php
//データ削除
$user = User::find(1); //id=1を削除
$user->delete();
```


## おススメ動画

##### [PHP【クラス入門】フレームワーク学ぶ前に～学習動画リスト～](https://qiita.com/daisu_yamazaki/items/ac63317224157c5dff58)

##### [TailwindCSS入門～学習動画リスト～](https://qiita.com/daisu_yamazaki/items/c1122260f82541438b8e)

## 役立ちましたか？
チャンネル登録・フォロー・SNSでの拡散も是非お願いいたします。

Twitter :　 https://twitter.com/daisu_yamazaki
Youtube： https://www.youtube.com/@osozaki



以上