Ground Sunlight

Windowsで作る - PHPプログラミングの開発環境

ユーザ用ツール

サイト用ツール


サイドバー

メインメニュー

XAMPP アレンジ

IED

WSL2

道具箱

リポジトリ編

フレームワーク編

公開ソフトウェア

メタ
リンク


このページへのアクセス
今日: 2 / 昨日: 0
総計: 1086

apricot:usage:ja:model

文書の過去の版を表示しています。


編集中

Apricot データベースとモデル

ORMの設定

ORマッパーにはIdiormを使用します。Idiormは元々シングルトンとして実装してあるのでそのまま使えます。使い方やメソッドについてはIdiormのマニュアルを参照して下さい。

設定ファイル

/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の場合)


データベースの構築

TODO


モデル

TODO


コメント

コメントを入力. Wiki文法が有効です:
 
apricot/usage/ja/model.1596422806.txt.gz · 最終更新: 2020/08/03 11:46 by tanaka