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 Database Proxy (ODP)接続方式ではODPアドレスを使用し、直接接続方式ではOBServerノードのIPアドレスを使用します。$port:OceanBaseデータベースの接続ポートを指定します。ODP接続方式のデフォルトは2883ですが、ODPのデプロイ時にカスタマイズ可能です。直接接続方式のデフォルトは2881ですが、OceanBaseデータベースのデプロイ時にカスタマイズ可能です。$database_name:アクセスするデータベースの名前です。注意
テナントに接続するユーザーは、そのデータベースに対する
CREATE、INSERT、UPDATE、SELECT権限を持っている必要があります。ユーザー権限に関する詳細については、MySQLモードの権限分類をご参照ください。。$user_name:テナントの接続アカウントを指定します。ODP接続の一般的な形式は:ユーザー名@テナント名#クラスタ名またはクラスタ名:テナント名:ユーザー名です。直接接続方式の形式は:ユーザー名@テナント名です。$password:アカウントのパスワードを指定します。
接続文字列に関する詳細については、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:モデルとテーブル構造を作成する
Userモデル
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- ユーザーを削除