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. Android TabHost TabWidget 去除黑线(底部下划线)

    采用TabHost布局时,往往会发现默认的系统风格与软件风格很不协调,比如TabWidget的下划线影响布局效果.通常情况下会去除其下划线.如果是采用xml布局文件,在TabWidget的属性项设置a ...

  2. Android 通用获取Ip的方法(判断手机是否联网的方法)!!!

    大家好,我们这一节讲一下,Android获取Ip的一些方法,在我们开发中,有判断手机是否联网,或者想获得当前手机的Ip地址,当然WIFI连接的和 我们3G卡的Ip地址当然是不一样的. 首先我尝试了如下 ...

  3. percona-toolkit -1

    http://blog.chinaunix.net/uid/16844903/cid-165634-list-1.html

  4. 假设有两个包含整数的vector对象,编写一段程序,检验其中一个vector对象是否是另一个的前缀。

    #include<iostream> #include<string> #include<vector> using namespace std; int main ...

  5. Debian中完全卸载MySQL

      之前服务器上配置测试用的服务环境,我偷懒顺手用网上现成的脚本进行安装,结果MySQL启动不了,于是我只有老老实实的重新安装MySQL Server,原本以为apt-get --purge这类命令可 ...

  6. Paginator

    Paginator There are several ways to paginate items. The simplest is by using the paginate method on ...

  7. OC中-数组是如何遍历的?

    #import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { NSAutoreleasePool ...

  8. bootstrap在iis中发布后无法看到图标,字体样式

      因为框架使用了字体文件来显示矢量的图标,为了能在IIS上正常显示图标,可以通过增加iis的MIME-TYPE来支持图标字体文件:

  9. 关于JFace带复选框的树

    树的复选框用CheckboxTreeViewer实现.由于其子类ContainerCheckedTreeViewer在没有选择全部子节点时可以自动将父节点设置成灰选,所以实现树的复选框更多的是用Con ...

  10. Redis的安装与使用

    一.什么 Redis REmote DIctionary Server,简称 Redis,是一个类似于Memcached的Key-Value存储系统.相比Memcached,它支持更丰富的数据结构,包 ...