YII2框架动态创建表模型

在YII2中,每个表对应一个model类

在开发过程中,我们在填写一个大型表单的时候,表单里有N个select下拉列表,每个下拉select来自于不同的表;

如果要在程序里用实例化引入这些model类,估计又是N个use引用,而且还需要写查询方法。

所以铁牛在使用过程中,就思考能否创建动态表模型来应用到我们的开发中。

代码见下:

namespace backend\classes;
//创建动态表模型
//在使用调用某些表数据的时候,勿需创建模型既可调用表数据,生成select
//$select= new SelectMade('bus_department',['id','department'],'sort','department','department');
//$department=$select->dropdown();
class SelectMade extends \yii\db\ActiveRecord {
static $table;
private $field;
public $model;
public $order;
public $count;
public $selectId;
public $extends;
public $selectName;
public $itemid;
//$table String 表名称
//$field Array 要查找的字段 egg:['id','department']
//$order String 排序字段
//$selectName String 下拉列表的名称
//$selectId String 下拉列表的ID
//$itemid Int 自增列序号或主键值
//$extends 下拉列表的扩展属性 'egg:<select $extends></select>
public function __construct($table,$field,$order,$selectName,$selectId,$itemid='',$extends='') {
self::$table=$table;
$this->field=$field;
$this->order=$order;
$this->selectId=$selectId;
$this->extends=$extends;
$this->selectName=$selectName;
$this->itemid=$itemid;
parent::__construct();
}
//定义动态表名词,数据来自于初始化类时
public static function tableName(){
return self::$table; }
//数据查询
public function query(){
//获得相应的下拉的数组
$this->model=$this->find()
->select($this->field)
->orderBy($this->order)
->asArray()
->all();
//获得记录的条数,为后续统计服务 ,目前我是预留着,为后续JSON做准备。
$this->count=$this->find()
->select($this->field)
->orderBy($this->order)
->count();
}
//动态生成下拉菜单
//return String
public function dropdown(){
$this->query();
$dropdown='<select id="'.$this->selectId.'" name="'.$this->selectName.'" class="easyui-combobox" '.$this->extends.'>'; foreach (array_values($this->model) as $k=>$v){
$v= array_values($v);
$m=($v[0]==$this->itemid)?' selected="selected"':' ';
$dropdown.=' <option value="'.$v[0].'" '.$m.'>'.$v[1].'</option>';
}
$dropdown.='</select>';
return $dropdown;
}

YII2框架动态创建表模型的更多相关文章

  1. python在sqlite动态创建表源码

    代码之余,将开发过程中经常用的代码片段备份一下,如下的代码是关于python在sqlite动态创建表的代码,应该能对各位有所用. import sqlite3 as db conn = db.conn ...

  2. MyBatis动态创建表

    转载请注明出处:https://www.cnblogs.com/Joanna-Yan/p/9187538.html 项目中业务需求的不同,有时候我们需要动态操作数据表(如:动态建表.操作表字段等).常 ...

  3. 菜鸟学SSH(十八)——Hibernate动态模型+JRebel实现动态创建表

    项目用的是SSH基础框架,当中有一些信息非常相似,但又不尽同样.假设每个建一个实体的话,那样实体会太多.假设分组抽象,然后继承,又不是特别有规律.鉴于这样的情况.就打算让用户自己配置要加入的字段,然后 ...

  4. flask的orm框架(SQLAlchemy)-创建表

    # 转载请留言联系 ORM 是什么? ORM,Object-Relation Mapping.意思就是对象-关系映射.ORM 主要实现模型对象到关系数据库数据的映射. 优点 : 只需要面向对象编程, ...

  5. Spring Boot:实现MyBatis动态创建表

    综合概述 在有些应用场景中,我们会有需要动态创建和操作表的需求.比如因为单表数据存储量太大而采取分表存储的情况,又或者是按日期生成日志表存储系统日志等等.这个时候就需要我们动态的生成和操作数据库表了. ...

  6. OrmLite动态创建表,一个实体类创建多张表的的偏招

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/LonelyRoamer/article/details/26299355 在做一个Android的项 ...

  7. SQL Server 动态创建表结构

    需求是,在word里面设计好表结构(主要在word中看起来一目了然,方便维护),然后复制sql 里面,希望动态创建出来 存储表结构的表 CREATE TABLE [dbo].[Sys_CreateTa ...

  8. 利用powerdesigner创建表模型后导出sql语句方法,以及报错 Generation aborted due to errors detected during the verification of the model.的解决办法

    今天用powerdesigner建了表模型,下面先说一下导出sql语句的步骤. 1.选项 2. 然后就报错了,下面说解决办法,很简单. 你没看错,把模型检查的√去掉就行了~~ 导出表名不带双引号的设置 ...

  9. JS动态创建表单post提交

    <script> //@创建表单方法 function post(URL, PARAMS) { var temp = document.createElement("form&q ...

随机推荐

  1. Object.defineProperty vs __defineGetter__ vs normal

    Testing in Chrome 31.0.1650.63 32-bit on Windows Server 2008 R2 / 7 64-bit Test Ops/sec Object.defin ...

  2. [001]socket通信--server和client实现迭代的简单例子

    server端: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unist ...

  3. Linux MySQL-Workbench安装

    yum install pcre-devel libglade2-devel gtkmm24-devel libgnome-devel lua-devel libzip-devel mysql-dev ...

  4. div 显示滚动条的CSS代码

    div 显示滚动条的CSS代码   div显示上下左右滚动条 <div style="width:260px;height:120px; overflow:scroll; border ...

  5. 利用Multipeer Connectivity框架进行WiFi传输

    什么是Multipeer Connectivity? 在iOS7中,引入了一个全新的框架——Multipeer Connectivity(多点连接).利用Multipeer Connectivity框 ...

  6. Test complete测试工具介绍

    Test complete 是一款性价比比较高的测试工具,能够满足大多数用户的自动化测试的需求. Test complete 是近几年流行和发展起来的一款自动化测试工具,早期版本由Automated ...

  7. visibility,display区别

    visibility:hidden,display:none 前者隐藏位置还在,后者隐藏位置消失

  8. 关于HTML5标签不兼容(IE6~8)

    HTML5的语义化标签以及属性,可以让开发者非常方便地实现清晰的web页面布局,加上CSS3的效果渲染,快速建立丰富灵活的web页面显得非常简单. 比较常用的HTML5的新标签元素有: <hea ...

  9. ASP.NET MVC总结

    一.概述 1.单元测试的NUnit, MBUnit, MSTest, XUnit以及其他的框架 2.ASP.NET MVC 应用的默认目录结构有三个顶层目录: Controllers.Models.V ...

  10. [转]Windows Shell 编程 第二章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987893】

    第二章Shell的结构  “Shell 编程”的大伞之下有大量的API函数和COM接口.这个种类繁多的‘命令’集允许你用不同的方法对Windows Shell进行编程.函数和接口并不是两种提供相同功能 ...