ThinkPHP ビュークエリ

不言
リリース: 2023-03-30 08:30:02
オリジナル
1808 人が閲覧しました

この記事では主に ThinkPHP ビュー クエリを紹介します。必要な方は参考にしてください。

ThinkPHP が提供するビュー クエリ アプリケーション機能は非常に強力で、複数のデータ テーブルのフィールドの内容を指定してフィルターすることができます。これらのデータ テーブルに基づいてビュー モデルに編成すると、このモデルを通じて複数テーブルの結合クエリを直接実行できるため、非常に便利で簡単です。

たとえば、プロジェクトでは次の 3 つのテーブルを定義します:

userアカウント名、関連情報、部門名
現時点では、ビュークエリを使用して処理できます。

以下は説明するための例です:


1. 新しいプロジェクトを構築し、関連する設定を実行します (前のチュートリアルを参照してください。ここでは省略します)
2. データベース tpview を作成し、これらの 3 つのテーブルを追加します

(1) ユーザーテーブル

CREATE TABLE `think_user` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID编号',
 `name` varchar(20) NOT NULL COMMENT '帐户',
 `password` varchar(32) NOT NULL COMMENT '密码',
 `dept_id` smallint(6) unsigned NOT NULL,
 `status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '开放状态',
 PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='会员表' AUTO_INCREMENT=2 ;
INSERT INTO `think_user` (`id`, `name`, `password`, `dept_id`, `status`) VALUES
(1, 'zzguo28', '123456', 2, 1);
ログイン後にコピー

(2) ユーザー情報

CREATE TABLE `think_user_info` (
 `user_id` int(11) NOT NULL COMMENT '用户id',
 `nick_name` varchar(30) NOT NULL COMMENT '用户昵称',
 `email` varchar(100) NOT NULL COMMENT '邮箱地址',
 `address` varchar(100) NOT NULL COMMENT '详细地址',
 `gender` tinyint(1) NOT NULL DEFAULT '0' COMMENT '性别',
 `mobile` varchar(100) NOT NULL COMMENT '手机号码',
 `telephone` varchar(100) NOT NULL COMMENT '电话号码',
 KEY `user_id` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='用户信息表';
INSERT INTO `think_user_info` (`user_id`, `nick_name`, `email`, `address`, `gender`, `mobile`, `telephone`) VALUES
(1, '国', 'zzguo28@163.com', 'TP路think街1.6号', 1, '12345678901', '123456');
ログイン後にコピー

(3) 部門分類テーブル
CREATE TABLE `think_dept` (
 `id` smallint(3) NOT NULL AUTO_INCREMENT,
 `name` varchar(50) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
INSERT INTO `think_dept` (`id`, `name`) VALUES
(1, '开发部'),
(2, '销售部'),
(3, '财务部');
ログイン後にコピー

3. project/Lib/Model の下にこれら 3 つのテーブルの基本モデル Model を作成します。 この例では、検証などの他の機能は含まれません。

 <?php
  class UserModel extends Model {
  }
 ?>
ログイン後にコピー

などのテストを簡単に定義できる限り、実際には、ビュー モデルに対応するデータ テーブルに対応する基本モデルがあるとは限りませんが、単一のテーブルの両方が一致するように作成することをお勧めします。そしてビューを操作することができます。

4. ビューモデルを作成します。コードは次のとおりです。詳細な注釈は以下に示されています:


(注: 最新の svn には動的拡張モデル機能が追加されました。新しいバージョンを使用するには、 protected 属性を変更する必要があります。このチュートリアルでは、継承メソッドの代わりに、動的展開関数を使用することをお勧めします。

上記のコードは次のように説明されています。コード行では、ビュー クエリは TP バージョン 1.6 以降、元の Model クラスから分離されているため、ここでは import メソッドを使用してビュー モデル クラスを導入する必要があります。

コードの 3 行目で、モデル名は UserViewModel として定義されています。Model の前のビュー モデルの名前は任意であり、通常は xxxViewModel などの名前を付けます。また、ViewModel を継承する必要があります。 (ThinkPHP バージョン 1.6 では、ViewModel を継承している限り、モデルの viewModel 属性を true に設定する必要はなくなりました)

コードの 4 行目の $viewFields 属性は、ビュー モデルに含まれるフィールドを表します。各データテーブルまたはモデルに必要なフィールド。

形式は

<?php
import(&#39;ViewModel&#39;);
class UserViewModel extends ViewModel{
  protected $viewFields = array(
    &#39;User&#39;   =>array(&#39;id&#39;,&#39;name&#39;,&#39;_as&#39;=>&#39;u&#39;,&#39;_type&#39;=>&#39;left&#39;),
    &#39;UserInfo&#39; =>array(&#39;email&#39;,&#39;mobile&#39;,&#39;_as&#39;=>&#39;ui&#39;,&#39;_on&#39;=>&#39;ui.user_id=u.id&#39;),
    &#39;Dept&#39;   =>array(&#39;name&#39;=>&#39;dept&#39;,&#39;_on&#39;=>&#39;u.dept_id=Dept.id&#39;),
  );
}
?>
ログイン後にコピー
です

コードの 7 行目の 'name' => 'dept' に注目してください。User モデルには既に name フィールドがあるため、この方法で Dept モデルの name フィールドを dept にマッピングします。フィールドが複数ある場合も、同じ方法で追加できます。

定義が完了したら、アクションでテストします。コードは次のとおりです。

protected $viewFields = array(
    &#39;表名&#39;=>array(&#39;所需字段&#39;,&#39;_as&#39;=>&#39;别名定义&#39;,&#39;_on&#39;=>&#39;筛选条件&#39;,&#39;_type&#39;=>&#39;指定join类型,支持right,inner,left三种&#39;),
);
ログイン後にコピー

次に、操作にアクセスすると、必要なクエリの内容が正常に取得されたことがわかります:

<?php
class IndexAction extends Action{
  public function index(){
    $dao = D(&#39;UserView&#39;);
    $where[&#39;u.id&#39;] = 1;
    dump($dao->where($where)->find());
    dump($dao->getLastSql());
  }
}
?>
ログイン後にコピー

そして、SQL が使用されていることがわかります。は次のとおりです

array(1) {
 [0] => array(5) {
  ["id"] => string(1) "1"
  ["name"] => string(7) "zzguo28"
  ["email"] => string(17) "zzguo28@163.com"
  ["mobile"] => string(11) "12345678901"
  ["dept"] => string(9) "销售部"
 }
}
ログイン後にコピー

ビューモデルのクエリモデルは、通常の単一テーブルとあまり変わりません。order、limitなど、よく知られたさまざまなコヒーレントな操作を使用できます。

関連する推奨事項:

ThinkPHP の動作拡張機能とプラグイン

ThinkPHP 実装更新データ例の詳細な説明 (デモ)


以上がThinkPHP ビュークエリの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート