Slimフレームワークの中でDoctrineを使ってDB操作を試す

Published: 2017年1月3日 by tomsato

概要

Doctrineを使ってPHPからデータベースを操作する

DoctrineとはORMツールで、ORMとはオブジェクト関係マッピング(Object relational mapping)というDBのデータとPHPのクラスをマッピングして変換する技法である

今回はPHPのマイクロフレームワークであるSlimの中でDoctrineを使ったDB操作サンプルプログラムを試す

環境準備

PHP/MySQL環境の作成方法は別ページにまとめたのでそれを使って準備する

CentOS6系にMySQL5.7とPHP5.6系を入れる

MySQLのデータを準備

以下のSQLを実施してDoctrine操作用のデータを準備する

mysql> create database MYDB;
mysql> create table MYDB.BOOK (book_id varchar(255) not null, name varchar(255) not null, created_date datetime default current_timestamp);
mysql> insert into MYDB.BOOK (book_id, name) values ('0000', 'hoge0');
mysql> insert into MYDB.BOOK (book_id, name) values ('0001', 'hoge1');

サンプルプログラム準備

サンプルプログラムのソースコード準備

$ git clone git@github.com:tomsato/doctrine_sample.git
$ cd doctrine_sample
$ composer install

アプリケーションからアクセスするユーザー名やパスワードについては以下のファイルを修正する

$ vim conf/slim/dependencies.php

ウェブサーバを起動

$ sudo php -S 0.0.0.0:80 -t public public/index.php

http://(サーバ名)/ にアクセスしてDBのデータを見れることを確認する

サンプルプログラム解説

ディレクトリ構成

// 必要なものを抜粋
$ tree
.
├── composer.json
├── conf
│   └── slim
│       ├── dependencies.php
│       ├── middleware.php
│       ├── routes.php
│       └── settings.php
├── public
│   └── index.php
├── src
│   ├── Controller
│   │   └── Index.php
│   └── Entity
│       └── Book.php
└── templates

dependencies.php

  • dependencies.phpにDoctrineのEntityManagerを登録する、DB接続情報もここで記述する
  • SlimでDIコンテナを利用できる
  •  DIコンテナ(依存性注入)の考え方
    • 依存性注入とは外部の環境などに依存する部分を切り離しソフトウェアの外部(つまりdependencies.php定義)から注入すること

Controller

  • Doctrineにはfinderメソッドというデータ検索のためのメソッドがある
  • findを使って主キーでレコードを検索している
  • サンプルプログラムではfindした結果をvar_dumpによって画面出力をしている

Entity

  • Entityはテーブルの個々のレコードを意味している
  • Book.phpで変数とDBテーブルをマッピングしている

コメントを書く

※ 個別に返信が必要な時のみご記入ください

※ Emailは公開されません

※ 承認されると名前・コメントが下記に表示されます

コメント一覧

最近の投稿

ビジュアルリグレッションテストについてまとめ、ネットで調べると数多くのライブラリがありどれがどんな立ち位置なのか全体像がわかりずらかったのでどんな種類があるのか入門の入門としてまとめます、またPlaywrightを使って実際に触ってみました

社内ツールなどの超小規模なAPIをGolangで実装する際にフレームワークを使うべきかを、実際にnet/httpを使った実装とフレームワークを使った実装を比較することでどれだけ優位性があるかを見ていきたいと思います。今回はフレームワークにはシンプルで使いやすそうなEchoを使うことにします。

vue-pdfを使ってNuxt.jsで作成しているアプリケーションに pdfスライドを表示させるサンプルを作成しました README.md通りに実装してもうまくいかないところがあったのでそのあたり含めてまとめます

Vue.js / Nuxt.jsにおけるログインの実装方法をまとめる Auth0やNuxt.jsのAuth Moduleとmiddlewareについて調べつつサンプルを作成することで理解を深める

コンポーネント設計について考える Atomic DesignやPresentational Component, Container Componentについてまとめつつ 自分だったらVue.js / Nuxt.jsでどういうコンポーネント設計にするかについてまとめます

カテゴリ一覧

タグ一覧