メインメニュー
XAMPP アレンジ
IED
WSL2
- 
道具箱リポジトリ編フレームワーク編公開ソフトウェアメタリンク- PHP ライブラリ- PHP 言語
 apricot:app:db-model文書の過去の版を表示しています。 
 編集中
 Apricot データベースとモデル— y2sunlight 2020-05-06 関連記事 
- Apricot アプリ
- Apricot データベースとモデル
 
 本章ではデータベースの設定とモデルの実装を行います。 
 データベースの構築Apricotでは以下のユーザテーブルを持っています。 テーブル名 : user カラム名 型 主Key 属性 説明 id integer ● autoincrement ID account text unique not null アカウント password text not null パスワード email text not null Eメールアドレス note text 備考 remember_token text 自動ログイン用 created_at text not null 作成日 updated_at text not null 更新日 version_no integer default 0 not null バージョンNo - ユーザ認証は(account,password)で行います
- remember_tokenは自動ログイン用の認証トークンです
- version_noは楽観的ロックで使用します
 SQLファイルApricotではアプリ起動時にデータベースにテーブルが存在しない時、テーブルを自動生成します。テーブル作成用のsqlは以下のファイルに保存します。このファイルは後述のORMの初期設定ファイルで使用されます。 /apricot/assets/sql - create.sql
- /* * User Table */ CREATE TABLE IF NOT EXISTS USER ( id INTEGER PRIMARY KEY autoincrement, account text UNIQUE NOT NULL, password text, email text NOT NULL, note text, remember_token text, created_at text NOT NULL, updated_at text NOT NULL, version_no INTEGER DEFAULT 0 NOT NULL ); 
 SQLファイルについて- SQLの文法及び使用できる関数などは使用しているデーターベース(ApricotではSQLite)に依存します。
- コメントは行コメント(–Comment)とブロックコメント(/* Comment */)が使用できます。
- 文はセミコロン(;)で区切って下さい。
- 連続する空白(TAB,Space,改行文字)は1つの空白と同じにみなされます。
 
 ORMの設定設定ファイル/apricot/config/setting - idiorm.setting.php
- <?php return [ 'sqlite' => [ 'db_file' => var_dir('db/apricot.sqlite'), 'connection_string' => 'sqlite:'.var_dir('db/apricot.sqlite'), 'caching' => true, 'logging' => true, ], 'initial_data' => [ 'user'=> [ 'exec' =>[ 'delete from sqlite_sequence where name=\'user\'', ], 'rows' => [ [ 'account' =>'root', 'password' =>password_hash('', PASSWORD_DEFAULT), 'email' =>'root@sample.com', 'note' =>'Initial User', ], ], ], ], ]; 
 - sqlite : 接続設定(apricotではSQLiteを使用します)- sqlite.db_file — データベースファイルのパス (既定値は var/db/apricot.sqlite')
- sqlite.connection_string — 接続文字列
- sqlite.caching — キャッシングの有無
- sqlite.logging — ロギングの有無
 - initial_data : 初期データ (テーブルが空の時に自動設定されます)- {テーブル名} — ここではユーザテーブル( user )を指定しています- exec — 実行したいSQLを記述します(複数指定可)
- rows — 行データを設定します(複数指定可)
 接続設定の詳細は以下を参照して下さい: 
 https://idiorm.readthedocs.io/en/latest/configuration.html#id1
 初期設定ファイルデータベースの設定は初期設定ファイルで行います。 /apricot/config/setup - idiorm.setup.php
- <?php //------------------------------------------------------------------- // ORM(idirom)の初期設定 //------------------------------------------------------------------- return function():bool { // データベースファイルの準備 $db_file = config('idiorm.sqlite.db_file'); if (!file_exists($db_path=dirname($db_file))) { mkdir($db_path,null,true); } // DBファイルの存在確認 $new_db_file = !file_exists($db_file); // データベース接続 ORM::configure([ 'connection_string' => config('idiorm.sqlite.connection_string'), 'caching' => config('idiorm.sqlite.caching',false), 'logging' => false, 'logger' => function($log_string, $query_time) { // SQL debug logging \Core\Log::info("SQL",[$log_string]); }, ]); //------------------------------------------- // テーブルの作成 (新しくDBを作った時) //------------------------------------------- if ($new_db_file) { $sql_text = file_get_sql(assets_dir('sql/create.sql')); if (!empty($sql_text)) { foreach($sql_text as $sql) { ORM::get_db()->exec($sql); } } } //------------------------------------------- // 初期ユーザの作成 (ユーザテーブルが空の時) //------------------------------------------- $initial_data = config('idiorm.initial_data'); if (isset($initial_data)) { foreach($initial_data as $key=>$item) { if(ORM::for_table($key)->find_one()===false) { if (array_key_exists('exec', $item)) { // SQLの実行 $exec = (array)$item['exec']; foreach($exec as $sql) { ORM::get_db()->exec($sql); } } if (array_key_exists('rows', $item)) { // 新しいレコードの作成 $rows = (array)$item['rows']; foreach($rows as $row) { $row = ORM::for_table($key)->create($row); $row->set_expr('created_at', "datetime('now')"); $row->set_expr('updated_at', "datetime('now')"); $row->save(); } } } } } // SQLログ開始 ORM::configure('logging' , config('idiorm.sqlite.logging',false)); return true; // Must return true on success }; 
 初期設定ファイルでは以下の事をおこないます: - データベースの保存フォルダが存在しない場合は作成します
- データベースへの接続
- テーブルの作成 (新しくDBを作った時)
- 初期ユーザの作成 (ユーザテーブルが空の時)
- SQLログの開始 (logging設定がtrueの場合)
 
 アプリケーション設定の変更上で作った idiorm.setup.php をアプリケーションの設定ファイル(app.php)に追加します。 /apricot/config - app.php
- <?php return [ 'setup' =>[ config_dir('setup/whoops.setup.php'), /* Error handler(whoops) */ config_dir('setup/bladeone.setup.php'), /* View template (BladeOne) */ config_dir('setup/aliases.setup.php'), /* Class aliases for view template and so on */ config_dir('setup/idiorm.setup.php'), /* ORM(idiorm) */ ], 'middleware' =>[], 'auth' =>[], 'csrf' =>[], ]; 
 
 テスト実行データベースファイル(apricot.sqlite)を作ってみましょう。 ブラウザ上で以下のURLにアクセス、Apricotのホーム画面を表示して下さい。 http://localhost/ws2019/apricot/public/ まだユーザ登録機能を実装していないので、ユーザテーブルの内容を見る事はできませんが、以下の場所にデータベースファイルが作成されていることを確認して下さい。 /apricot/var/db 
 {{fa>file-o}} apricot.sqlite
 モデルクラスTODO
 
 apricot/app/db-model.1589165207.txt.gz · 最終更新: 2020/05/11 11:46 by y2sunlight
 
 
 
 
 
 
 





コメント