PHPとLaravelでTiDB Cloudを始めよう
TiDB Cloudは、フルマネージドなDatabase-as-a-Service(DBaaS)です。TiDBの優れた点をすべてクラウドに取り込み、データベースの煩雑さに囚われることなく、アプリケーションに集中できるようにします。
このチュートリアルでは、PHPアプリケーションのバックエンドデータベースとしてTiDB Cloudを使用する方法について学びます。PHP と Laravel を使用して、シンプルな Web アプリケーションを構築する予定です。私たちは、次のことを行います。
1.TiDB CloudでTiDBデータベースを起動します。
2.ローカルマシンにLaravelをインストールします。
3.アプリケーションのロジックを記述します。
4.Laravelアプリケーションを実行します。
始める前に
TiDB Developer Tierクラスタの作成
1.TiDB Cloudのアカウントをお持ちでない方は、こちらをクリックしてアカウントを取得してください。
2.TiDB Cloudのアカウントにログインします。
3.ランディングページで、「Create Cluster」をクリックします。
4.プラン選択ページで、Developer Tierプランの「Get Started for Free」をクリックします。
5.「Create Cluster」 ページで、クラスタ名とルートパスワードを設定します(このチュートリアルでは、このクラスタをデモと呼びます)。
6.クラスタを作成するために、自分に近いクラウドサービスリージョンを選択します。クラウドプロバイダーはAWSです。
7.Cluster Tierを選択します。デフォルトはS1.devです.
8.「Submit」をクリックします.
TiDB Cloudクラスタは約5〜10分で作成されます。
TiDB Cloudに接続する
1.https://tidbcloud.com/console/clusters にアクセスし、クラスタにサインインします。
2.TiDB Cloudコンソールで、パネルの右上にある「Connect」をクリックします。
3.「Connect to TiDB]」ダイアログで、クラスタのトラフィックフィルタを作成します。
a.ステップ 1 で、「Allow Access from Anywhere]」をクリックします(このオプションは、このチュートリアルの目的ではOKですが、実運用では推奨されません)。
b.「Create Filter」をクリックします。
4.「Web SQL Shell」タブで、「Open SQL Shell」をクリックし、クラスタのパスワードを入力します。これで、SQLを書くことができるようになりました。
データベースの作成
1.SQL シェルで、アプリケーションが使用する laravel_demo データベースを作成します。
CREATE DATABASE laravel_demo;
2.データベースユーザーを作成します。ユーザー名は「demo_client」とし、「<pwd>」の代わりに「PingCAP1」のような独自のパスワードを設定する必要があります。
CREATE USER 'demo_client' IDENTIFIED BY '<pwd>';
3.作成したユーザーにすべての権限を付与します。繰り返しますが、これはチュートリアル用であり、実運用にはお勧めしません。
GRANT INSERT,SELECT,UPDATE,DELETE,CREATE,DROP,INDEX ON *.* TO 'demo_client';
Laravelプロジェクトの準備
1.TiDB Cloudのホストアドレスを取得します。このアドレスは後のステップで入力することになります。TiDBクラウドのトップページで、「Connect」をクリックします。「Connect to TiDB」ページで、「Step 2: Connect with a SQL client」にあるホストアドレスが、xxx.xxxx.xxxx.prod.aws.tidbcloud.comという形式で表示されています。
2.laravel-demoというLaravelのプロジェクトを作成します。
composer create-project laravel/laravel laravel-demo
3.laravel-demoというディレクトリが作成されているのが確認できます。そのディレクトリに移動します。
cd laravel-demo
4..env設定ファイルを編集します。 DB_HOSTをTiDB Cloudのホストアドレスに、<pwd>をパスワードに置き換えてください。
DB_CONNECTION=mysql DB_HOST=xxx.xxxx.xxxx.xxxx.prod.aws.tidbcloud.com DB_PORT=4000 DB_DATABASE=laravel_demo DB_USERNAME=demo_client DB_PASSWORD=<pwd>
アプリケーションを書く
アプリケーションのデータベース接続を設定した後、アプリケーションを構築することができます。アプリケーションのロジックを書くには、モデルの定義、コントローラの作成、URLルートの更新が必要です。
モデルを定義する
Laravelはテーブルと対話するために、ORM(Object Relational Mapping)フレームワークであるEloquentモデルを使用します。モデルは通常、appModelsディレクトリに配置されます。以下のステップを使用して、モデルを作成し、対応するテーブルとモデルをマッピングします。
1.新しいモデルを生成し、データベースにマイグレーションします。ルートディレクトリの下で、make:model Artisanコマンドを使用します。
php artisan make:model Order -m php artisan make:model Customer -m
2.オーダーテーブルを作成します。database/migrationsディレクトリで、<直近のタイムスタンプ>_create_orders_table.phpファイルを開いてください。
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateOrdersTable extends Migration { /** * Runs the migrations. * * @return void */ public function up() { Schema::create('orders', function (Blueprint $table) { $table->bigIncrements('oid'); $table->bigInteger('cid'); $table->float('price'); }); } /** * Reverses the migrations. * * @return void */ public function down() { Schema::dropIfExists('orders'); } } ?>
3.新規に顧客テーブルを作成します。database/migrationsディレクトリで、<recent_time_stamp>_create_customers_table.phpを開いてください。
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateCustomersTable extends Migration { /** * Runs the migrations. * * @return void */ public function up() { Schema::create('customers', function (Blueprint $table) { $table->bigIncrements('cid'); $table->string('name',100); }); } /** * Reverses the migrations. * * @return void */ public function down() { Schema::dropIfExists('customers'); } } ?>
4.新しいテーブルを生成します。プロジェクトのルートフォルダにいることを確認し、migrate Artisanコマンドを使用します。
php artisan migrate
5. app/Modelsディレクトリに移動します。
6. フレームワークがOrderモデルで使用するテーブルを指定します。app/Models/Order.php ファイルを編集します。
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Order extends Model { protected $table = 'orders'; protected $primaryKey = 'oid'; public $timestamps = false; protected $fillable = [ 'cid', 'price', ]; protected $guarded = [ 'oid', ]; protected $casts = [ 'uid' => 'real', 'price' => 'float', ]; use HasFactory; } ?>
7. 顧客モデルに使用するテーブルを指定します。app/Models/Customer.phpを編集します。
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Customer extends Model { use HasFactory; protected $table = 'customers'; protected $primaryKey = 'cid'; public $timestamps = false; protected $fillable = [ 'name', ]; protected $guarded = [ 'cid', ]; protected $casts = [ 'name' => 'string', 'cid' => 'int', ]; } ?>
コントローラを作成する
1.コントローラを作成します。コマンドラインで、次のように入力します。
php artisan make:controller CustomerController php artisan make:controller OrderController
2. 顧客テーブルに対するコントローラを編集します。app/Http/Controllers/CustomerController.php ファイルを編集します。
<?php namespace App\Http\Controllers; use App\Models\Customer; use Illuminate\Http\Request; class CustomerController extends Controller { public function getByCid($cid) { $customer_info = Customer::where('cid',$cid)->get(); if ($customer_info->count() > 0){ return $customer_info; } return abort(404); } public function insert(Request $request) { return Customer::create(['name' => $request->name]); } } ?>
3. オーダーテーブルに対するコントローラを編集します。app/Http/Controllers/OrderController.php ファイルを編集します。
<?php namespace App\Http\Controllers; use App\Models\Order; use Illuminate\Http\Request; class OrderController extends Controller { public function insert(Request $request) { return Order::create(['cid' => $request->cid, 'price' => $request->price]); } } ?>
URLルートを更新する
URL ルーティングは、リクエスト URL を受け入れるようにアプリケーションを設定することができます。アプリケーションのルートのほとんどは、routes/api.php ファイルで定義されます。最も単純なLaravelのルートは、URIとクロージャコールバックで構成されています。
<?php use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; use App\Http\Controllers\customerController; /* |-------------------------------------------------------------------------- | API Routes |-------------------------------------------------------------------------- | | Here is where you can register API routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | is assigned the "api" middleware group. Enjoy building your API! | */ Route::middleware('auth:sanctum')->get('/user', function (Request $request) { return $request->user(); }); Route::post('/customer', 'App\Http\Controllers\CustomerController@insert'); Route::post('/order', 'App\Http\Controllers\OrderController@insert');?>
Laravelアプリケーションを実行する
1.以下のコマンドを実行し、Laravelアプリケーションを起動します。
php artisan serve
2.いくつかのサンプルデータを挿入して、アプリケーションをテストしてください。新しいターミナルウィンドウを開き、以下のコマンドを実行してください。
- 顧客テーブルに “Peter “という名前の顧客を挿入します
curl --location --request POST 'http://127.0.0.1:8000/api/customer' --form 'name="Peter"'
- オーダーテーブルにレコードを挿入する。
curl --location --request POST 'http://127.0.0.1:8000/api/order' --form 'cid=1' --form 'price="3.12"'
3. 挿入が成功したかどうかを確認します。Web SQL シェルで、次のステートメントを実行します。
select * from laravel_demo.orders;
4.
oid | cid | price -----+-----+------- 1 | 1 | 3.12 (1 rows)
上の結果は、データの挿入が成功したことを示しています。また、顧客テーブルにデータが挿入されたかどうかを確認することもできます。
Want to learn more?
TiDB Cloudを試す準備はできましたか?TiDB CloudのDeveloper Tierが利用可能になりました! Amazon Web Services上でTiDBクラスタを1年間無料で運用することができます。TiDB Cloudの最新情報は、Twitterでフォローしてください。