これはモデルであり、学習の気持ちは、水モデルthinkphpでの別の研究ノートは非常に明確ではありません。
0x01のモデルクラス紹介
各テーブルには、モデルクラス名に対応するデータベースは、テーブル名、列名内のクラスのメンバ変数です、
一つのテーブルは、データオブジェクトの中に対応するクラスに対応します
私たちは、モデル・テーブル上の特別な操作を持っていない場合は、我々は、モデルが、C層を構築することはできませんし、層がVを持っている必要があります
クラスモデルシンプルコード:
<?PHPの 名前空間ホーム\モデル。 使用\モデルを考えます。 クラス UserModelは、拡張モデル { 公共 $ tablePrefix '=' ; 公共 $ tableNameの = 'ユーザ。 公共 $ trueTableName = 'ユーザ。 公共 $ DBNAMEは = 'スナッチ' ; パブリック 関数のテキスト(){ しますprint_r($この - > DB->クエリ( 'セグメント制限1 SELECT * FROM' )); リターン "这是模型" 。 } } ?>
クラス呼制御モデルインスタンス:
<?PHPの 名前空間ホーム\コントローラ。 使用\コントローラーを考えます。 クラス IndexControllerは延びコントローラ{ パブリック 関数インデックス(){ エコー "<メタのcharset = 'UTF-8'>" 。 エコーの"Hello World。" ; $ユーザ = D( 'ユーザ' )。 $ ARR = $ユーザ - >(配列( 'UID' => '2'、 'パスワード' => 'fcea920f7412b5da7be0cf42b8c93759')) - >順序(配列( 'UID' => 'DESC')) - >リミット( 1) - >グループ( 'UID') - > ()を選択し、 エコー $ユーザー - > getLastSql(); しますprint_r($ユーザー- >クエリ( 'セグメント限界1 SELECT * FROM' )); トレース( ''、$ユーザ - > getLastSql()、 'ユーザー' )。 トレース( 'HAHAH'、$ユーザ - >テキスト()、 'ユーザー' )。 $ U = D(); しますprint_r($ arrの); エコー "<H1> _____________________________ </ H1>" ; しますprint_r($ U - >クエリ( "case_textリミット0から選択*" )); $ユーザー - >を選択し(配列( '' => 'UID> 1'、 '順序' => 'パスワードASC' )); }
モデルはDとMの機能を言及する必要があります。
D機能とM機能が内蔵されている方法は、モデルのPHP高速初期化を考えてみてください。
DおよびM関数との差が関数であり、関数Mは、モデルクラス定義モデルなしで初期化することができる、すなわちときネイティブSQL実行M機能は、より効率的です。
$ユーザ = D( 'ユーザ')。
下のクラスの初期化モデルUserModelのこのコードの代表。
D機能は、現在のプロジェクトのモジュールの下のLib /モデルをインスタンス化されます
モジュールが存在しない場合は、直接オブジェクトモデル(の意義及びM)同じ(機能)をインスタンス化返さ
そしてMは、データベース処理操作にそのデータベースのテーブル名としてモデルパラメータ.. $名のオブジェクトのインスタンスを返します。
以下の3つの方法を例示クラスのインスタンス化モデル
0x02のモデルクラスのインスタンス化
新しい3つの方法は、直接インスタンス化し、M及びD関数、M及びD関数の差の次の焦点との間の差の有意性。
新しい例
新しい方法:テーブルモデルが必要とする独自のモデルファイルを作成する必要があり、モデル構築に行くためのテーブル:ホーム/モデルに/新xxxModel.class.phpに
<?PHPの 名前空間ホーム\モデル。 使用\モデルを考えます。 クラス InfoModelは延びモデルを { }
クラスファイルに対応したコントローラ:
関数SHOWALL() { $情報 = 新しい新しい \ホーム\モデル\ InfoModel(); //は、最初の名前空間から始まる絶対パスでなければならない のvar_dump($インフォ); }
D機能
親クラスモデルのオブジェクトをインスタンス化し、モデルファイルをビルドしないでください。
インフォ$ = D( "情報"); // 親は考えて作成\モデルオブジェクト のvar_dump($情報を)。
M機能
親モデルの例
$情報= M( "情報");
直接モデル内の親クラスの属性を呼び出すことができ、データベース関連の操作は得られませんが、具体的なデータテーブルであります
これは、手術台のデータ情報を可能に
D機能とM機能は、ネイティブSQLクエリをサポートしています。
パブリック 関数の指数(){ エコー "<メタのcharset = 'UTF-8'>" 。 エコーの"Hello World。" ; $ユーザ = D( 'ユーザ' )。 $編曲 = $ユーザー - >クエリ( 'word_aから選択数(*)' ); トレース( 'SQL'、$ユーザー - > getLastSql()、 'ユーザー' )。 しますprint_r($ arrの); } // 生成SQL: 選択数(*)word_aから:SQL パブリック 関数指数(){ エコー「<; エコーの"Hello World。" ; $ユーザー = M(); $編曲 = $ユーザー - >クエリ( 'word_aから選択数(*)' ); トレース( 'SQL'、$ユーザー - > getLastSql()、 'ユーザー' )。 しますprint_r($ arrの); } // 生成SQL: 選択数(*)word_aから:SQL
データの断片を照会します。
// マスター鍵に応じて複数のデータ取得 $一覧 =すべてのユーザー::(L '2,3' ); // またはアレイの使用 $一覧 =すべてのユーザー::([1,2,3 ]); foreachの($を一覧 AS $キー => $ユーザー){ エコー $ユーザー - > 名前; } // 配列のクエリを使用 $一覧 =すべてのユーザー::([ 'ステータス' =>を1 ]); // 使用の閉鎖クエリ $一覧 = ::すべてのユーザー(機能($クエリ){ $クエリ - >( 'ステータス' ,. 1) - >リミット(3) - >注文( 'ID'、 'ASC' ); }); foreachの($一覧 $キー => $ユーザー){ エコー $ユーザー - > 名。 }
データテーブル定義
ThinkPHPモデルここで属性データテーブル名のいくつかの定義があります。
モデルの構成オプション
フィールド定義
DB_FIELDS_CACHEは、データテーブルのフィールドをキャッシュしたいあなたが頻繁に現像時にデータベースの構造を変更した場合、自動的に、フィールドのキャッシュをオフにするためのパラメータを設定し、することはできません、あなたはプロジェクトの設定ファイルに以下の設定を追加することができます。
フィールドキャッシュ閉じ//
「DB_FIELDS_CACHE」=> falseの
デフォルト値は、フィールドのキャッシュオフになっているので、データの構造を次のようにデバッグモード配慮が頻繁に変更されることがあります。ご注意を。
グローバル定義
一般的な構成は、アプリケーション構成ファイルや設定ファイル次の設定パラメータにモジュールを追加することです。
//データベース構成情報
'DB_TYPE' => 'MySQLの'、// データベースタイプ 'DB_HOST' => '127.0.0.1'、// サーバアドレス 'DB_NAME' => 'thinkphp'、// データベース名 'DB_USER' => 'ルート' 、 // ユーザ名 'DB_PWD' => '123456'、// パスワード 'DB_PORT' => 3306、// ポート 'DB_PARAMS' => 配列()、// データベース接続パラメータ 'DB_PREFIX' => 'think_'、/ / データベーステーブル接頭辞 'DB_CHARSET' => 'UTF8'、// 文字 => 'DB_DEBUG' TRUE、//は、デバッグモードが有効になった後、レコードのSQLデータベースのログを記録することができます