Phalcon3のマイクロアプリケーションでDBアクセスするAPIを作成する

Phalcon3のマイクロアプリケーションでDBアクセスするAPIを作成する

マイクロアプリケーションでデータベースアクセスするとなってくるとややこしくなってくるので、ディレクトリ構成を以下のように簡潔にします。


C:.
├─models
└─index.php
view raw

gistfile1.txt

hosted with ❤ by GitHub

PostgreSQLにempuserテーブルが存在するとします。以下DDL文です。


create table "public".empuser (
id integer not null
, firstname character varying(60) not null
, lastname character varying(60) not null
, age integer not null
, primary key (id)
);
view raw

gistfile1.txt

hosted with ❤ by GitHub

このテーブルに対応するモデルはmodels\Empuser.phpとなります。Empuser.phpは一旦以下のようにします。


<?php
namespace App\Models;
use Phalcon\Validation;
class Empuser extends \Phalcon\Mvc\Model
{
public function validation()
{
// とりあえずこれだけ
$validator = new Validation();
}
}
view raw

gistfile1.txt

hosted with ❤ by GitHub

Phalconには決まりごとが多く、データベースにアクセスするには、テーブルに対してモデルが1対1で必要です。

オートローダー

Phalcon\Loaderクラスのオートローダー機能によって、モデルファイルがどこにあるかなどの情報を設定しておきます。


// オートローダー設定
$loader = new Phalcon\Loader();
$loader->registerNamespaces(
[
'App\Models' => __DIR__ . '/models/',
]
);
$loader->register();
view raw

gistfile1.txt

hosted with ❤ by GitHub

DB接続情報

DB接続情報の設定をindex.phpで記述します。


// DB接続情報
$container = new Phalcon\Di\FactoryDefault();
$container->set(
'db',
function () {
return new Phalcon\Db\Adapter\Pdo\Postgresql(
[
'host' => 'localhost',
'port' => 5432,
'username' => 'postgres',
'password' => 'confrage',
'dbname' => 'postgres'
]
);
}
);
$app = new \Phalcon\Mvc\Micro($container);
view raw

gistfile1.txt

hosted with ❤ by GitHub

このDB接続情報を\Phalcon\Mvc\Microクラスのパラメータとして渡す必要があります。

PHQLでSELECT文を発行

Phalcon3ではPHQLという構文があるようです。JPQLみたいなものでしょうか。

$phql = 'SELECT * FROM App\Models\Empuser WHERE id = :idxxxx: ';

App\Modelsが名前空間です。Empuser.phpをSQL文中に指定することができます。

:idxxxx:がプレースホルダーです。

modelsManager->executeQueryの第一引数にPHQL、第二引数に置換変数の配列を指定します。


$app
->modelsManager
->executeQuery(
'SELECT * FROM App\Models\Empuser WHERE id = :idxxxx: ',
[
'idxxxx' => $id
]);
echo json_encode($records);
view raw

gistfile1.txt

hosted with ❤ by GitHub

Phalcon\Http\Responseクラスでレスポンス作成

Phalcon\Http\Responseクラスでレスポンスを作成します。

setJsonContentメソッドに配列を渡せばJSON形式で返してくれます。

setStatusCodeメソッドでHTTPステータスを設定することができます。第二引数に成功時のメッセージを指定します。第二引数省略可能です。


$response = new Phalcon\Http\Response();
// $recordがexecuteQueryメソッドの戻り値
if ($record === false) {
$response->setStatusCode(404); 
$response->setJsonContent(
[
'status' => 'NOT-FOUND'
]
);
} else {
$response->setStatusCode(200);
$response->setJsonContent(
[
'status' => 'FOUND',
'data' => [
'id' => $record[0]->id,
'firstname' => $record[0]->firstname,
'lastname' => $record[0]->lastname,
'age' => $record[0]->age
]
]
);
}
return $response;
view raw

gistfile1.txt

hosted with ❤ by GitHub

これでSelect文発行した結果を返すAPI作成完了です。

Phalcon3のマイクロアプリケーションでDBアクセスするAPIを作成する

GitHub - takahashi-h5/phalcon-select
Contribute to takahashi-h5/phalcon-select development by creating an account on GitHub.

コメント

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

タイトルとURLをコピーしました