目录

新手模式

用上次的查询结果,作为本次的查询条件

    //关联查询
public function actionRelatesearch(){
//新手模式
$category = Category::findOne(2); //查分类表里的数据 abj
$categoryarr = $category->attributes; //获取某一行的分类结果里的对象属性,array
dump($categoryarr); //查文章里的cid等于2的 拿上面的结果 $categoryarr['cid']=2 作为本次查询的条件
$article = Article::find()->asArray()->where(['cid'=>$categoryarr['cid']])->all();
dump($article); //返回的是二维数组arr
}

结果:

Array
(
[cid] => 2
[c_name] => 娱乐
) Array
(
[0] => Array
(
[article_id] => 6
[article_title] => php的发展前景怎样
[num] => 8
[cid] => 2
) [1] => Array
(
[article_id] => 7
[article_title] => 67岁宋春丽与聂远出新戏,满头花发让人心疼,面容慈祥豪爽依旧!
[num] => 12
[cid] => 2
) [2] => Array
(
[article_id] => 8
[article_title] => 知微又涨粉啦!《天盛长歌》小衣衣、楚王和金狮王子你会选谁?
[num] => 18
[cid] => 2
) [3] => Array
(
[article_id] => 9
[article_title] => 刘亦菲穿旗袍带仙气,赵丽颖穿旗袍优雅,她穿旗袍最有民国范
[num] => 14
[cid] => 2
) )

hasMany关联模式查询

思路

1.用category表里查一行,查出某一个分类下的所有字段 结果是一维数组下的值是obj

2.查出来的结果,用hasMany()去关联查询article表里的关联字段cate_id查询出属于该分类下的所有数据,用all()方法查多行

新建mode层Article.php

<?php
namespace app\models; use yii\db\ActiveRecord; class Article extends ActiveRecord
{ }

新建mode层Category.php

<?php
namespace app\models; use yii\db\ActiveRecord; class Category extends ActiveRecord
{ }

新建控制器HomeController.php

    public function actionRelatesearch(){
//关联查询
//查询方法一(查一行) 一维数组下的值是obj
// $category = Category::findOne(1); //查分类表里的数据 abj
//// vp($category);
// $articles = $category->hasMany(Article::className(),['cate_id'=>'cid'])->asArray()->all();
// dd($articles); //查询方法二(查多行,结果需要提出一行来使用):
//查分类表里的数据要是一维数组下的值是obj 不能用asArray()转为数组,不然hasMany会报错
$category = Category::find()->where(['cid'=>2])->all();
vp($category);
//关联查询 用hasMany方法前提要满足二个条件
//1.如果查出来是二维数组需要用角标提成一维数组
//2.主表category 表查出来的结果要是一维数组下的值是obj 不能用asArray转成数组
//第一个参数是string article的命名空间app/models/Article == Article::className()
vp(Article::className()); //打印结果app/models/Article
//第二个参数是array key是article表里的关联字段 value是category里的主键
$articles = $category[0]->hasMany(Article::className(),['cate_id'=>'cid'])->asArray()->all();
dd($articles);
}

打印结果

D:\xampp\htdocs\yii\helper\function.php:19:
array (size=1)
0 =>
object(app\models\Category)[78]
private '_attributes' (yii\db\BaseActiveRecord) =>
array (size=2)
'cid' => string '2' (length=1)
'c_name' => string '娱乐' (length=6)
private '_oldAttributes' (yii\db\BaseActiveRecord) =>
array (size=2)
'cid' => string '2' (length=1)
'c_name' => string '娱乐' (length=6)
private '_related' (yii\db\BaseActiveRecord) =>
array (size=0)
empty
private '_relationsDependencies' (yii\db\BaseActiveRecord) =>
array (size=0)
empty
private '_errors' (yii\base\Model) => null
private '_validators' (yii\base\Model) => null
private '_scenario' (yii\base\Model) => string 'default' (length=7)
private '_events' (yii\base\Component) =>
array (size=0)
empty
private '_eventWildcards' (yii\base\Component) =>
array (size=0)
empty
private '_behaviors' (yii\base\Component) =>
array (size=0)
empty D:\xampp\htdocs\yii\helper\function.php:19:string 'app\models\Article' (length=18) D:\xampp\htdocs\yii\helper\function.php:26:
array (size=4)
0 =>
array (size=4)
'article_id' => string '6' (length=1)
'article_title' => string 'php的发展前景怎样' (length=24)
'num' => string '8' (length=1)
'cate_id' => string '2' (length=1)
1 =>
array (size=4)
'article_id' => string '7' (length=1)
'article_title' => string '67岁宋春丽与聂远出新戏,满头花发让人心疼,面容慈祥豪爽依旧!' (length=89)
'num' => string '12' (length=2)
'cate_id' => string '2' (length=1)
2 =>
array (size=4)
'article_id' => string '8' (length=1)
'article_title' => string '知微又涨粉啦!《天盛长歌》小衣衣、楚王和金狮王子你会选谁?' (length=87)
'num' => string '18' (length=2)
'cate_id' => string '2' (length=1)
3 =>
array (size=4)
'article_id' => string '9' (length=1)
'article_title' => string '刘亦菲穿旗袍带仙气,赵丽颖穿旗袍优雅,她穿旗袍最有民国范' (length=84)
'num' => string '14' (length=2)
'cate_id' => string '2' (length=1)

20.Yii2.0框架多表关联一对多查询之hasMany的更多相关文章

  1. 21.Yii2.0框架多表关联一对多查询之性能优化--模型的使用

    控制器里 功能: 通过分类,查分类下的所有文章 //关联查询 public function actionRelatesearch(){ //关联查询 //查询方法一(查一行) 一维数组下的值是obj ...

  2. 22.Yii2.0框架多表关联一对一查询之hasOne

    思路: 通过文章查它对应的分类信息 一对一的关系 控制器里 //一对一关联查询 public function actionRelatesone() { //方法一,hasOne() 用查一条文章的结 ...

  3. Mybatis表关联一对多、多对一、多对多

    项目工程结构如下: 1. 搭建MyBatis框架环境 首先需要引入两个包:mybatis.jar 和 sqljdbc42.jar包 若分页需要导入两个包:pagehelper-5.1.0.jar 和 ...

  4. 后盾网lavarel视频项目---lavarel多表关联一对多操作实例

    后盾网lavarel视频项目---lavarel多表关联一对多操作实例 一.总结 一句话总结: 1.一对多中多那个部分的数据前端通过json弄到服务器 2.所有通过一操作多的时候,都要用上模型中定义的 ...

  5. yii2.0框架安装心得

    yii2.0安装心得 能够搜索到这篇文章的朋友相信是对yii框架有兴趣的,但是我不得不吐槽的是,这个安装过程确实让人头疼,接下来就让大家见证一下这个纠结的过程 根据官网的说法,安装这个框架需要用到co ...

  6. 8.Yii2.0框架控制器接收get.post数据

    8.Yii2.0框架控制器接收get.post数据 一.get传参 <?php /** * Created by Haima. * Author:Haima * QQ:228654416 * D ...

  7. 将一个多表关联的条件查询中的多表通过 create select 转化成一张单表的sql、改为会话级别临时表 【我】

    将一个多表关联的条件查询中的多表通过 create   select  转化成一张单表的sql 将结果改为创建一个会话级别的临时表: -- 根据下面这两个sql CREATE TABLE revenu ...

  8. Mybatis表关联一对多

    有了前面几章的基础,对一些简单的应用是可以处理的,但在实际项目中,经常是关联表的查询,比如:最常见到的多对一,一对多等.这些查询是如何处理的呢,这一讲就讲这个问题.前面几篇教程中介绍的都是单表映射的一 ...

  9. YII2.0使用ActiveForm表单(转)

    Controller控制器层代码 <?php namespace frontend\controllers; use frontend\models\UserForm; class UserCo ...

随机推荐

  1. 069 Sqrt(x) 求平方根

    实现 int sqrt(int x) 函数.计算并返回 x 的平方根.x 保证是一个非负整数.案例 1:输入: 4输出: 2案例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., ...

  2. JAVA基础之Date类、DateFormat类及Calendar类

    个人理解: 关于Date类,进行截取或者转换时一定要注意好数据类型,long类型后面要加上L.时间的原点是1970年.用DateFormat则完成日期与文本之间的转换,特别注意的是:月是用M,时是用H ...

  3. jsonp, json区别

    JSONP由两部分组成: 回调函数和数据 回调函数是接收到响应时应该在页面中调用的函数,其名字一般在请求中指定. 数据是传入回调函数中的JSON数据. jsonp var script=documen ...

  4. android studio项目提交Git@OSC

    转载地址:http://www.bubuko.com/infodetail-977061.html 先到git.oscchina.net网站上申请个账号,然后创建一个项目.过程不再说了. 新建工程后, ...

  5. Linux 系统挂载阿里云数据盘

    适用系统:Linux(Redhat , CentOS,Debian,Ubuntu) *  Linux的云服务器数据盘未做分区和格式化,可以根据以下步骤进行分区以及格式化操作. 下面的操作将会把数据盘划 ...

  6. SharePoint 2013 安装配置(3-1)

    在第二部分中,我向您展示了如何在Windows Server 2012 R2 for SharePoint 2013上设置Active Directory域服务.现在我们应该能够在Active Dir ...

  7. optparse 模块

    一.optparse是专门用来在命令行添加选项的一个模块.支持python2.3及以上版本,从2.7版本之后,python不再更新该模块,2.7之后的版本推荐使用argparse模块. 二.optpa ...

  8. hdu 2126 Buy the souvenirs 买纪念品(01背包,略变形)

    题意: 给出一些纪念品的价格,先算出手上的钱最多能买多少种东西k,然后求手上的钱能买k种东西的方案数.也就是你想要买最多种东西,而最多种又有多少种组合可选择. 思路: 01背包.显然要先算出手上的钱m ...

  9. Android(java)学习笔记130:Android中操作XML数据(使用Pull解析器)

    1. Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, Pull解析器 ...

  10. Dojo操作dom元素的样式

    1.使用dom-style的set方法,可以直接设置dom元素的样式属性,这和使用dom元素的style属性效果一样. 2.使用dom-class的replace方法可以替换某个dom元素的样式,ad ...