DEVELOPERS BLOGデベロッパーズブログ
- HOME >
- 加藤 正人のデベロッパーズブログ >
- CakePHP3 と SQLite
加藤 正人のデベロッパーズブログ
- 氏名
- 加藤 正人
- 役職
- 多分SE
- 血液型
- 秘密
- 出没
- 美味しいもののあるところ
- 特色
- タヒチ大好き。ちょいメタボ。
- 2020/12/15
- CakePHP3 のリダイレクトがうまく行かない例
- 2020/11/12
- Apache Bench
- 2020/10/05
- PhpSpreadsheet でExcel ファイルを読み込む (CakePHP3)
PHP 5.x 以降には、SQLite というデータベースがバンドルされている。CakePHP には SQLite 用のドライバが標準添付されており、簡単に利用できる。
今回は CakePHP 3 で SQLite を使用する方法を調べてみた。
SQLite の特徴
- パブリックドメインなデータベースエンジンであり、ライセンス料などが不要。公式サイトはこちら。
- メモリーとファイルシステムを利用してアプリケーションとして実装され、データベースサーバが不要。
- ファイルシステムを使用せず、メモリー内のみでの実装が可能 (「メモリー内データベース (In-Memory データベース)」)
- 「認証」という概念がない。
CakePHP 3 から SQLite を利用する
CakePHP 3 から SQLite を利用する場合は、 Datasources セクションの定義、Table 定義時のコネクション設定、および Table 初期設定などが必要となる。
Datasources セクションの定義
config/app.php の 'Datasources' セクション ('Datasources' => [ …【中略】… ] として定義) に、以下のコードを追加する。
これにより 'SQLite' というデータソース名が定義される。(他のデータソース定義と重複しなければ別の名称でも可。)
なお、'database' 項に指定できるのは「ファイル名」のみで、URI 記法は利用できない。これは CakePHP 3 の SQLite ドライバーの制限である。このため、接続パラメータやデータベースオプションをファイル名に埋め込む方法は利用できない。またパスやサブフォルダをつけない純粋な ':memory:' はファイル名として予約されており、この文字列を指定した場合はデータベースはメモリー内にのみ配置されファイルは使用しない。(パスなどを付加した、例えば './:memory:’ 等はメモリー内データベースファイル指定とは認識されず、ファイルとして処理しようとする点に注意)
テーブル定義
SQLite を使用するテーブルの定義で、データソースとして 'SQLite' を指定する。CakePHP 3 ではプロパティではなく、データソース名文字列を返す静的メソッドで定義する。これにより、テーブルオブジェクト生成時に 'SQLite' データソースを使用することを明示できる。
なお、テーブルデータベースの実体は通常はデータソースの 'database' 項で指定した単一のファイルに格納され永続的なものになるが、':memory:' でメモリー内データベースを指定した場合はデータベースは当該データベースへの接続がクローズされると直ちに破棄される。また、同じメモリー内データベースに接続できるのは、同一プロセス内で生成された接続に限られる点に注意。
2020/12/15
2020/11/12
2020/10/05
2020/09/11
2020/08/03