详解Yii2中hasOne、hasmulti、多对多关联查询的用法
序
HasOne和hasMany是Yii2中多表关联查询特有的函数,在使用多表关联查询时推荐使用。为什么呢?因为这样关联查询的结果会保留Yii2的表头排序功能和CheckboxColumn中输入的id存储值,至于是否还有其他需要探索的好处,笔者到目前为止已经找到了这两个共同的好处。没有其他相关的查询,如yiidbQuery查询或原生SQL语句查询。当查询显示在列表中时,标题是黑色的。
Yii2 hasOne,hasMany多表关联查询,无论是文档还是文章,都能轻松找到参考妈妈,但是作者为什么要写这篇文章呢?想法其实很简单,因为我在之前的资料中没有看到多对多关联查询的用法,所以不重复别人,也重复自己。本文的重点是谈谈多对多关联查询的用法,这样可以提高你的知识。
需求分析
1.使用一条查询语句可以显示列表中的所有数据。该列表包含一对一、一对多和多对多关系。
2.Yii2的表头排序功能和CheckboxColumn中输入id的存储值不能被破坏。
翻译
1.一对一、一对多、多对多、标题排序。
2.CheckboxColumn中输入的id值。
代码分析
多对多
示例:一个客户可以有多个标签,一个标签可以用于多个客户。
1.将以下代码添加到TSales(客户表的模型)中:
public function get common _ tag(){ return $ this-has many(common tag :3360 class name(),[' itemid '=' t _ id '])-oncondition([' id type '=' content '])-join with([' tag ']);}注意:这里的common_tag表是一个中间表,在common_tag中间表与customer表通过hasMany进行关联后,需要增加一个joinWith(['tag'])关联标记表。OnCondition是一个附加条件的方法。
2.将以下代码添加到CommonTag(中间表模型)中,只需使用hasOne。
public function gettag(){ return $ this-hasOne(tag : class name(),[' id '=' tagid ']);}3.将以下代码添加到TSalesSearch(客户的Search模型)中,以关联common_tag中间表:$ query-join with([' common _ tag ']);
4.页面输出代码如下:
[ 'attribute'='tag_id ',' value '=function($ model){ $ _ tag=$ model-getRelatedRecords()[' common _ tag '];if(!空($ _ tag)){ $ tagName=' ';foreach($ _标记为$key=$value) { $tagName。=$value['tag']['name']。'/';}返回rtrim($tagName,'/');}},],注意:$model-getRelatedRecords()是用于获取[_ related : yiidbbaseactiverecord 3360 private]数组的值。
一对多
1.前面多对多用法中使用的has multi属于一对多用法。如果想实现一对多,只需要去掉joinWith,其他配置和输出方法都是一样的。
一对一的
1.一对一的用法之前已经提到过。hasOne属于一对一使用,它的配置和hasMany一样,这里就不详细描述了。
需要注意的事项
1.当使用以下代码输出(common_tag.name)无法获得关联查询找到的值时,应该是客户表中存在该名称字段,并且该值为空。名称复制后,主表的字段将优先输出。解决方案是通过使用$model-getRelatedRecords()获得它。
['attribute'=' tag _ id ',' value'=' common _ tag.name']以上是边肖介绍的Yii2中hasOne、hasmulti、多对多相关查询用法的详细说明,希望对大家有所帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!
版权声明:详解Yii2中hasOne、hasmulti、多对多关联查询的用法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。