- SQL実行の入出力の連想配列をarray shapeでタイプする例です
$age
で指定されたユーザーリストがusers_by_age.sql
のSQL実行され結果(array<array{id: string, name: string}>
が返ります。- SQLへのリクエストと結果が補完できるようになります。(echo $user['name']
の
name`は入力補完されます。) - 連想配列の使い方に間違いないかpsalmやphpstanで静的解析出来ます。
- 入力補完にはdeep-assoc-completionが必要です。
- array shapek記法については https://phpstan.org/writing-php-code/phpdoc-types#array-shapes を参照してください。
- Ray.QueryModuleはSQLをSQL実行オブジェクトに変換します。
@Query
はメソッドインターセプトしてidで指定したSQLを実行してメソッドの結果として返します。 - メソッドは入出力のシグネチャーだけ利用し中身はなしでもOKです。SQL実行の結果を更新したい場合にはSQL実行結果がセットされた
$body
を変更しreturn $this;
します。(BEAR.Sundayの場合) - psalmを使っている場合には
@psalm-suppress
でエラー抑制するか(メソッド内に記述がないため)、ダミーのデータを返却する必要があります。 - Ray.Di + Ray.QueryModuleをインストールすればBEAR.Sundayでなくても使えます。
<?php
class Users
{
public function listNames(int $age) : void
{
$users = $this->getUsers($age);
foreach ($users as $user) {
echo $user['name'] . PHP_EOL;
}
}
/**
* @Query(id="users_by_age", type="row_list")
*
* @return array<array{id: string, name: string}>
* @psalm-suppress InvalidReturnType
*/
public function getUsers(int $age) : array
{
unset($age);
}
}