大家好,今天我们聊一下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.

  1. 在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']);}
  1. 更改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;}
  1. 前端 它是用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 的用法及在页面中增加字段的问题相关推荐

  1. js数组中foEach和map的用法详解 jq中的$.each和$.map

    数组中foEach和map的用法详解 相同点: 1.都是循环遍历数组(仅仅是数组)中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项value, ...

  2. html中怎么写jq,用jQuery替换HTML页面中的文本

    如何替换jQuery中的任何字符串? 假设我有一个字符串"-9o0-9909",我想用另一个字符串替换它. 在问问题之前如何使用jQuery将HTML块替换为HTML块的可能重复, ...

  3. spark中各类key算子的用法汇总(持续更新中)

    启动方式: spark-shell --master yarn 依赖导入: import org.apache.spark.{SparkConf, SparkContext} 输出rdd的类型举例: ...

  4. c语言中除号和百分号的用法,注册会计师计算题中能打百分号吗

    注册会计师财务管理机考想要输入x的平方,就可以输入x^2 ^是shift+,输入^的时候鼠标的光标会跳到上标位置,别用鼠标点上标,输入完成之后,可以按Tab键回到正常的位置. 扩展资料: 其他常见快捷 ...

  5. HTML中嵌套的子frame如何访问父页面中的函数?

    我解决的办法,在父页面写了个函数,然后在frame页面调用父页面的函数,具体代码如下: 父:function a(){} 子frame:window.parent.a(); 问题迎刃而解 https: ...

  6. 网页编辑html中怎么写搜索代码,如何在html页面中实现查找功能

    前台效果: html 查找: 相关教程推荐:html教程 js

  7. 在html中如何设置静音,如何用JS静音页面中的所有声音?

    小编典典 规则1:切勿在页面加载后启用音频自动播放. 无论如何,我将使用jQuery显示HTML5: // WARNING: Untested code ;) window.my_mute = fal ...

  8. C++string类常用函数 c++中的string常用函数用法总结

    string类的构造函数: string(const char *s);    //用c字符串s初始化 string(int n,char c);     //用n个字符c初始化 此外,string类 ...

  9. php request time,php中time()与$_SERVER[REQUEST_TIME]用法区别分析

    php中time()与$_SERVER[REQUEST_TIME]用法区别分析 发布于 2015-01-26 08:56:46 | 143 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本 ...

  10. 关于GCC/LLVM编译器中的sanitize选项用处用法详解

    关于GCC/LLVM编译器中的sanitize选项用处用法详解 ​ 编译器中sanitize选项原本来自google的开源C/C+ +工具集sanitizers项目, 包括了AddressSaniti ...

最新文章

  1. TypeError: ord() expected a character, but string of length 6 found
  2. oracle怎么下载安装,Oracle数据库的下载和安装方法
  3. Metasploit***技巧:后***Meterpreter代理
  4. Javascript单线程实现
  5. 与股权投资有关的抵消分录的编制
  6. python简单菜单_创建一个简单的python菜单
  7. cgo的效率 golang_golang CGO FAQ TIPS : cgo 从 C 传递 slice 到 go
  8. python 之禅 import this
  9. 从 Elasticsearch 来看分布式系统架构设计
  10. fatal error C1010: unexpected end of file while looking for precompiled header directive
  11. Linux 切换用户
  12. 4.创建并调用自动控制器(api)
  13. Spss 的基本方法使用步骤
  14. 兄弟 DCP-7055打印机硒鼓清零方法
  15. 陕西国防学院计算机系网络教研室,陕西国防工业职业技术学院:全卫强副院长赴各院部调研教师发展工作...
  16. 多人在线编辑文档 开发_腾讯文档,支持多人实时在线协同编辑
  17. 计算机网络修复提示DNS服务器,dns的服务器故障怎么办,电脑dns异常修复了没用...
  18. maven使用slf4j输出日志到文件
  19. 这年头,你还能不懂点IP地址吗?
  20. 机器视觉之ros人脸识别

热门文章

  1. steam版拳皇14无法正常启动
  2. 下拉菜单(Dropdown)
  3. 中国第一,全球领先的「浪潮」:用智慧计算征服的计算力天下
  4. 【HLS】HTTP Live Streaming draft-pantos-http-live-streaming-14
  5. 基于权限特征和机器学习的Android恶意程序识别技术
  6. 网络安全-解密WinRAR捆绑恶意程序并自动上线MSF的原理
  7. web前端中的文本居中效果
  8. eslint 无法格式化ts_vscode 使用ESLint 自动检查,保存时自动格式化
  9. 安装老版本flash - 解决”正尝试安装的adobe flash player不是最新版本“的办法
  10. echarts常见图形-时间轴(五)