Laravel は、洗練された PHP の Web 開発フレームワークです。組み込みの Eloquent ORM は、シンプルな ActiveRecord の実装を提供し、データベース操作を簡単かつ直感的にします。
本記事では、Laravel Eloquent ORM を使用して OceanBase データベースに接続し、テーブルの作成、データの挿入、クエリなどの基本的な操作を実現する方法を紹介します。
前提条件
- PHP 8.0以降のバージョンがインストールされていること。
- Composerパッケージ管理ツールがインストールされていること。
- OceanBaseデータベースがインストールされ、MySQLテナントが作成されていること。
- OceanBaseデータベースの接続文字列を取得していること。
手順
- OceanBaseデータベースの接続文字列を取得する
- Laravelプロジェクトを作成し、依存関係をインストールする
- データベース接続を設定する
- モデルとコントローラーを作成する
- データベース操作コードを記述する
- プログラムを実行し、結果を検証する
ステップ1:OceanBaseデータベースの接続文字列を取得する
OceanBaseデータベースのデプロイ担当者または管理者から、該当するデータベース接続文字列を取得します。
obclient -h$host -P$port -u$user_name -p$password -D$database_name
パラメータ説明:
$host:OceanBaseデータベースへの接続IPアドレス。OceanBaseデータベースプロキシ(OceanBase Database Proxy、ODP)接続方式ではODPアドレスを使用し、直接接続方式ではOBServerノードのIPアドレスを使用します。$port:OceanBaseデータベースへの接続ポート。ODP接続方式のデフォルトポートは2883で、ODPデプロイ時にカスタマイズ可能です。直接接続方式のデフォルトポートは2881で、OceanBaseデータベースのデプロイ時にカスタマイズ可能です。$database_name:アクセス対象のデータベース名。$user_name:テナントの接続アカウント。ODP接続の一般的な形式:ユーザー名@テナント名#クラスタ名またはクラスタ名:テナント名:ユーザー名。直接接続方式の形式:ユーザー名@テナント名。$password:アカウントのパスワード。
注意
テナントに接続するユーザーは、データベースに対する CREATE、INSERT、UPDATE、および SELECT 権限が付与されていなければなりません。ユーザー権限の詳細については、MySQLモードの権限分類を参照してください。
接続文字列の詳細については、OBClientを使用したOceanBaseテナントへの接続を参照してください。
例:
obclient -hxxx.xxx.xxx.xxx -P2881 -utest_user001@mysql001 -p****** -Dtest
ステップ2:Laravelと依存関係のインストール
Composerを使用して新しいLaravelプロジェクトを作成します:
composer create-project laravel/laravel laravel-oceanbase cd laravel-oceanbaseインストールを確認します:
php artisan --version
ステップ3:データベース接続の設定
config/database.php ファイルを編集し、MySQL接続オプションを設定します:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '2881'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
ステップ4:モデルとコントローラーを作成する
ユーザーモデル
app/Models/User.phpを作成します:<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\Schema; class User extends Model { protected $table = 'users'; protected $fillable = ['username', 'email', 'age']; /** * ユーザーテーブルを作成する */ public static function createTable() { if (!Schema::hasTable('users')) { Schema::create('users', function ($table) { $table->id(); $table->string('username', 100); $table->string('email', 100)->unique(); $table->integer('age')->nullable(); $table->timestamps(); }); return true; } return false; } }
ステップ5:データベース操作コードを記述する
コントローラー
app/Http/Controllers/UserController.phpを作成します:<?php namespace App\Http\Controllers; use App\Models\User; use Illuminate\Http\Request; class UserController extends Controller { // ユーザーテーブルを作成 public function __construct() { User::createTable(); } // ユーザーを作成 public function create(Request $request) { $user = User::create([ 'username' => $request->input('username'), 'email' => $request->input('email'), 'age' => $request->input('age'), ]; return response()->json($user); } // ユーザーを検索 public function show($id) { $user = User::findOrFail($id); return response()->json($user); } // ユーザーを更新 public function update(Request $request, $id) { $user = User::findOrFail($id); $user->update([ 'username' => $request->input('username', $user->username), 'email' => $request->input('email', $user->email), 'age' => $request->input('age', $user->age), ]); return response()->json($user); } // ユーザーを削除 public function delete($id) { $user = User::findOrFail($id); $user->delete(); return response()->json(['message' => 'ユーザーの削除に成功しました']); } // すべてのユーザーを検索 public function index() { $users = User::all(); return response()->json($users); } }ルート
routes/api.phpを追加します:<?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\UserController; // 手動で /api プレフィックスを追加 Route::prefix('api')->group(function () { Route::get('/users', [UserController::class, 'index']); Route::post('/users', [UserController::class, 'create']); Route::get('/users/{id}', [UserController::class, 'show']); Route::put('/users/{id}', [UserController::class, 'update']); Route::delete('/users/{id}', [UserController::class, 'delete']); });app/Providers/AppServiceProvider.phpファイルを修正します:<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Register any application services. */ public function register(): void { // } /** * Bootstrap any application services. */ public function boot(): void { //$this->loadRoutesFrom(base_path('routes/api.php')); } }
ステップ6:プログラムを実行し、結果を検証する
開発サーバーを起動します:
php artisan serveAPIツール(Postmanなど)を使用して、以下のインターフェースをテストします:
GET http://localhost:8000/api/users- ユーザーリストを取得するPOST http://localhost:8000/api/users- 新規ユーザーを作成するGET http://localhost:8000/api/users/1- 指定ユーザーを取得するPUT http://localhost:8000/api/users/1- ユーザーを更新するDELETE http://localhost:8000/api/users/1- ユーザーを削除する