破壊的変更が行われたv0.xからv1.0への移行について説明します。 なお、セマンティックバージョンに従いv1.0からは破壊的変更は行われません。
entity
アトリビュートが無効になりました。使用するとエラーになります。
ハイドレート(戻り値にエンティティを使用)する場合はentity
とtype
のアトリビュートを取り除きます。
interface TodoInterface
{
- #[DbQuery('todo_item', entity: Todo::class, type:'row')]
+ #[DbQuery('todo_item')]
public function item(string $id): Todo;
- #[DbQuery('todo_list', entity: Todo::class)]
+ #[DbQuery('todo_list')]
+ /** @return array<Todo>> */
public function list(): array;
ページングの時はジェネリクスで指定します。戻り値をハイドレートするときは廃止されたentity
に変わってこの指定が必須になりました。
interface TodoPagerInterface
{
- #[DbQuery('todo_list'), Pager(perPage: 10, template: '/{?page}'), entity: Todo:class]
+ #[DbQuery('todo_list'), Pager(perPage: 10, template: '/{?page}')]
+ /** @return Pages<Todo> */
public function __invoke(): Pages;
}
戻り値がarrayでrow
の形式で値が戻る時のみtype: 'row'
の指定が必要です。これはarrayだけではrow (array)なのかrow_list (array<array>)なのか判別がつかないからです。エンティティにハイドレートしない場合は従来と変更がありません。
interface TodoInterface
{
#[DbQuery('todo_item', type:'row')]
public function item(string $id): array;
#[DbQuery('todo_list')]
public function list(): array;
}
item
やlist
などの接尾語の指定は無効になります。その他はv0.7からの移行と同じです。