この記事では主に ThinkPHP ビュー クエリを紹介します。必要な方は参考にしてください。
ThinkPHP が提供するビュー クエリ アプリケーション機能は非常に強力で、複数のデータ テーブルのフィールドの内容を指定してフィルターすることができます。これらのデータ テーブルに基づいてビュー モデルに編成すると、このモデルを通じて複数テーブルの結合クエリを直接実行できるため、非常に便利で簡単です。
たとえば、プロジェクトでは次の 3 つのテーブルを定義します:
userアカウント名、関連情報、部門名
現時点では、ビュークエリを使用して処理できます。
1. 新しいプロジェクトを構築し、関連する設定を実行します (前のチュートリアルを参照してください。ここでは省略します)
2. データベース tpview を作成し、これらの 3 つのテーブルを追加します
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);
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');
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, '财务部');
<?php class UserModel extends Model { } ?>
(注: 最新の svn には動的拡張モデル機能が追加されました。新しいバージョンを使用するには、 protected 属性を変更する必要があります。このチュートリアルでは、継承メソッドの代わりに、動的展開関数を使用することをお勧めします。
上記のコードは次のように説明されています。コード行では、ビュー クエリは TP バージョン 1.6 以降、元の Model クラスから分離されているため、ここでは import メソッドを使用してビュー モデル クラスを導入する必要があります。
コードの 3 行目で、モデル名は UserViewModel として定義されています。Model の前のビュー モデルの名前は任意であり、通常は xxxViewModel などの名前を付けます。また、ViewModel を継承する必要があります。 (ThinkPHP バージョン 1.6 では、ViewModel を継承している限り、モデルの viewModel 属性を true に設定する必要はなくなりました)
コードの 4 行目の $viewFields 属性は、ビュー モデルに含まれるフィールドを表します。各データテーブルまたはモデルに必要なフィールド。
<?php import('ViewModel'); class UserViewModel extends ViewModel{ protected $viewFields = array( 'User' =>array('id','name','_as'=>'u','_type'=>'left'), 'UserInfo' =>array('email','mobile','_as'=>'ui','_on'=>'ui.user_id=u.id'), 'Dept' =>array('name'=>'dept','_on'=>'u.dept_id=Dept.id'), ); } ?>
protected $viewFields = array( '表名'=>array('所需字段','_as'=>'别名定义','_on'=>'筛选条件','_type'=>'指定join类型,支持right,inner,left三种'), );
<?php class IndexAction extends Action{ public function index(){ $dao = D('UserView'); $where['u.id'] = 1; dump($dao->where($where)->find()); dump($dao->getLastSql()); } } ?>
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) "销售部" } }
ThinkPHP の動作拡張機能とプラグイン
ThinkPHP 実装更新データ例の詳細な説明 (デモ)
以上がThinkPHP ビュークエリの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。