yii2中hasMany 和 hasOne 的用法及在页面中增加字段的问题
大家好,今天我们聊一下yii 中hasMany和hasOne,在页面中增加字段的问题。希望对一些同学有帮助。
hasMany和hasOne的具体的用法手册写的很详细,我们就不多说了。今天重点要了解的是在yii2中gii自动生成crud的情况下,怎么运用关联方法。
一 . 数据库表
订单表
CREATE TABLE `doub_order` (`order_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',`order_w_id` int(10) unsigned NOT NULL DEFAULT '0',`order_name` char(20) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '名称',`order_time` int(10) NOT NULL DEFAULT '0' COMMENT '时间',PRIMARY KEY (`order_id`),UNIQUE KEY `order_w_id` (`order_w_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
订单详情表
CREATE TABLE `doub_order_info` (`order_info_id` int(10) unsigned NOT NULL AUTO_INCREMENT,`order_w_id` int(10) unsigned NOT NULL DEFAULT '0',`order_info_name` varchar(20) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '名称',`goods_id` int(10) unsigned NOT NULL DEFAULT '1' COMMENT '商品id',`order_info_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '时间',PRIMARY KEY (`order_info_id`),KEY `order_w_id` (`order_w_id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
二. 用gii生成相应的代码自己生成一下就好了。
三、 之后我们要修改一下代码,让他们进行关联 这里就重点说一下hasMany.
- 在order model 中修改
/*** biaoqian*增加字段名称 'goods_id' => '课程',*/public function attributeLabels(){return ['order_w_id' => '订单号','order_name' => '订单名称','order_time' => '时间','goods_id' => '课程',];}/*** 一个订单有多个订单详情* @return \yii\db\ActiveQuery**/public function getOrderInfo(){return $this->hasMany(OrderInfo::className(),['order_w_id'=>'order_w_id']);}
- 更改OrderSearch model
//增加了一个安全验证 orderInfo.goods_id
public function rules(){//safe : 安全return [[['order_id','order_w_id','order_name','order_time','orderInfo.goods_id'], 'safe'],[['order_id','order_w_id','order_time'], 'integer'],//[['orderInfo.goods_id'],'safe']];}
// $query->joinWith('orderInfo');进行左关联
public function search($params){$query = Order::find();//数据提供者$dataProvider = new ActiveDataProvider(['query' => $query,'pagination' => ['pageSize' => 20,],]);$query->joinWith('orderInfo');//$query->select('doub_order.*,doub_order.order_w_id,doub_order_info.goods_id');//加载参数$this->load($params);if (!$this->validate()) {return $dataProvider;}//条件$query->andFilterWhere(['order_w_id' => $this->order_w_id,'order_time' => $this->order_time,]);$query->andFilterWhere(['like','order_name',$this->order_name]);//echo $query->createCommand()->getRawSql();return $dataProvider;}
- 前端 它是用bootstrap和小组件构成
<?= GridView::widget(['dataProvider' => $dataProvider,'filterModel' => $searchModel,'columns' => [['class' => 'yii\grid\SerialColumn'],'order_w_id','order_name','order_time:datetime',
// 'orderInfo.goods_id',['attribute' => 'goods_id',//要和后台统一'value' => function ($searchModel) {$_tag = $searchModel->orderInfo;//获取对象// print_r($_tag);if(!empty($_tag)){$tagName="";foreach ($_tag as $key => $value) {//print_r($value);$tagName.=$value['goods_id'].'/';}return rtrim($tagName,'/');}}],['class' => 'yii\grid\ActionColumn'],],]); ?>
最后
yii2中hasMany 和 hasOne 的用法及在页面中增加字段的问题相关推荐
- js数组中foEach和map的用法详解 jq中的$.each和$.map
数组中foEach和map的用法详解 相同点: 1.都是循环遍历数组(仅仅是数组)中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项value, ...
- html中怎么写jq,用jQuery替换HTML页面中的文本
如何替换jQuery中的任何字符串? 假设我有一个字符串"-9o0-9909",我想用另一个字符串替换它. 在问问题之前如何使用jQuery将HTML块替换为HTML块的可能重复, ...
- spark中各类key算子的用法汇总(持续更新中)
启动方式: spark-shell --master yarn 依赖导入: import org.apache.spark.{SparkConf, SparkContext} 输出rdd的类型举例: ...
- c语言中除号和百分号的用法,注册会计师计算题中能打百分号吗
注册会计师财务管理机考想要输入x的平方,就可以输入x^2 ^是shift+,输入^的时候鼠标的光标会跳到上标位置,别用鼠标点上标,输入完成之后,可以按Tab键回到正常的位置. 扩展资料: 其他常见快捷 ...
- HTML中嵌套的子frame如何访问父页面中的函数?
我解决的办法,在父页面写了个函数,然后在frame页面调用父页面的函数,具体代码如下: 父:function a(){} 子frame:window.parent.a(); 问题迎刃而解 https: ...
- 网页编辑html中怎么写搜索代码,如何在html页面中实现查找功能
前台效果: html 查找: 相关教程推荐:html教程 js
- 在html中如何设置静音,如何用JS静音页面中的所有声音?
小编典典 规则1:切勿在页面加载后启用音频自动播放. 无论如何,我将使用jQuery显示HTML5: // WARNING: Untested code ;) window.my_mute = fal ...
- C++string类常用函数 c++中的string常用函数用法总结
string类的构造函数: string(const char *s); //用c字符串s初始化 string(int n,char c); //用n个字符c初始化 此外,string类 ...
- php request time,php中time()与$_SERVER[REQUEST_TIME]用法区别分析
php中time()与$_SERVER[REQUEST_TIME]用法区别分析 发布于 2015-01-26 08:56:46 | 143 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本 ...
- 关于GCC/LLVM编译器中的sanitize选项用处用法详解
关于GCC/LLVM编译器中的sanitize选项用处用法详解 编译器中sanitize选项原本来自google的开源C/C+ +工具集sanitizers项目, 包括了AddressSaniti ...
最新文章
- TypeError: ord() expected a character, but string of length 6 found
- oracle怎么下载安装,Oracle数据库的下载和安装方法
- Metasploit***技巧:后***Meterpreter代理
- Javascript单线程实现
- 与股权投资有关的抵消分录的编制
- python简单菜单_创建一个简单的python菜单
- cgo的效率 golang_golang CGO FAQ TIPS : cgo 从 C 传递 slice 到 go
- python 之禅 import this
- 从 Elasticsearch 来看分布式系统架构设计
- fatal error C1010: unexpected end of file while looking for precompiled header directive
- Linux 切换用户
- 4.创建并调用自动控制器(api)
- Spss 的基本方法使用步骤
- 兄弟 DCP-7055打印机硒鼓清零方法
- 陕西国防学院计算机系网络教研室,陕西国防工业职业技术学院:全卫强副院长赴各院部调研教师发展工作...
- 多人在线编辑文档 开发_腾讯文档,支持多人实时在线协同编辑
- 计算机网络修复提示DNS服务器,dns的服务器故障怎么办,电脑dns异常修复了没用...
- maven使用slf4j输出日志到文件
- 这年头,你还能不懂点IP地址吗?
- 机器视觉之ros人脸识别
热门文章
- steam版拳皇14无法正常启动
- 下拉菜单(Dropdown)
- 中国第一,全球领先的「浪潮」:用智慧计算征服的计算力天下
- 【HLS】HTTP Live Streaming draft-pantos-http-live-streaming-14
- 基于权限特征和机器学习的Android恶意程序识别技术
- 网络安全-解密WinRAR捆绑恶意程序并自动上线MSF的原理
- web前端中的文本居中效果
- eslint 无法格式化ts_vscode 使用ESLint 自动检查,保存时自动格式化
- 安装老版本flash - 解决”正尝试安装的adobe flash player不是最新版本“的办法
- echarts常见图形-时间轴(五)