背景 🖼️
業務でバックエンドの実装をすることが増えてきました。
復習のために今回はLaravelのEloquentについてまとめます。
こちらの本で今は勉強しています。
Eloquentとは 🐳
LaravelのORM(オブジェクトリレーショナルマッピング)です。
データベースとコードを紐付けます。
データベース接続を隠蔽し、脆弱性に対応でき、必要なデータのCRUD(Create:登録、Read:参照、Update:更新、Delete:削除)ができます。
LaravelのEloquentを使用しないコード
<?php
// データベース接続情報
$host = 'localhost';
$db = 'example_db'; // データベース名
$user = 'username'; // ユーザー名
$pass = 'password'; // パスワード
$charset = 'utf8mb4';
// PDOでデータベースに接続
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
} catch (PDOException $e) {
throw new PDOException($e->getMessage(), (int)$e->getCode());
}
// booksテーブルから全ての本を取得
$sql = "SELECT name FROM books";
$stmt = $pdo->query($sql);
// 各本の名前を表示
while ($row = $stmt->fetch()) {
echo $row['name'] . "<br>";
}
?>
LaravelのEloquentを使用したコード
<?php
use App\Models\Books;
$books = Book:all();
foreach($books as $book) {
echo $book->name;
}
Laravelを使用したするコードでコード量が大幅に減ります。
また、セキュリティも強化されます。
素のPHPでの記述だと以下のようにすることができ、SQLインジェクションのリスクがあります(実際はプリペアドステートメントで対応できます)。
// ユーザー入力を直接SQLに組み込む(危険)
$userInput = $_GET['book_name'];
$sql = "SELECT * FROM books WHERE name = '$userInput'";
Eloquentモデルクラス 🐘
MVCで言う所のM(Model)に当たります。
Eloquentモデルクラスはデータベースのテーブルと紐づきます。
デフォルトではクラス名のsnakeケースかつ複数形の名前のtableに紐付きます。
use Illuminate\Database\Eloquent\Model;
class Book extends Model
{
// デフォルトでは 'books' テーブルと紐づく
}
最後に
概要レベルですが要点は掴めたと思っています。
次回は以下について書こうと思います。
- リレーション(hasOne、hasMany、belongsTo)
- Eloquentとクエリビルだの違い
参考 ✨