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

时间:2022-10-05 09:48:59

思路:

  1. 通过文章查它对应的分类信息
  2. 一对一的关系

控制器里

    //一对一关联查询
    public function actionRelatesone()
    {
        //方法一,hasOne() 用查一条文章的结果去关系查它对应的分类信息,
        $article = Article::findOne(1);
//        $category = $article->getCategory();

        //这里是取的是$article下的属性category,
        //它会调用__get方法,会自动调用getCategory()方法
        //模型里可以不加one(),会自动调用one()方法
        //这里是用article作关系主表的,所以模型要写在article模型里
        $category = $article->category;
        dd($category);

//        //方法二,with用多条文章的结果去关联查它对应的分类信息
          //这里是用article作关系主表的,所以模型要写在article模型里
//        $articles = Article::find()->with('category')->asArray()->all();
//        dd($articles);
    }

模型里

<?php
namespace app\models;

use yii\db\ActiveRecord;

class Article extends ActiveRecord
{
    public function getCategory()
    {

        //方法一:会自动调用one()方法 可以省略one()
        $category = $this->hasOne(Category::className(),['cid'=>'article_id'])->asArray()->one();
        return $category;

        //方法二:
        //        $category = $this->hasOne(Category::className(),['cid'=>'article_id']);
//        return $category;
    }
}

方法一打印结果:

D:\xampp\htdocs\yii\helper\function.php:26:
array (size=2)
  'cid' => string '1' (length=1)
  'c_name' => string '新闻' (length=6)

方法二打印结果:

D:\xampp\htdocs\yii\helper\function.php:26:
array (size=9)
  0 => 
    array (size=5)
      'article_id' => string '1' (length=1)
      'article_title' => string '刘强东被捕照曝光 美警署:调查期可*出入境 ' (length=63)
      'num' => string '0' (length=1)
      'cate_id' => string '1' (length=1)
      'category' => 
        array (size=2)
          'cid' => string '1' (length=1)
          'c_name' => string '新闻' (length=6)
  1 => 
    array (size=5)
      'article_id' => string '2' (length=1)
      'article_title' => string '《唐诗三百案》看2集入坑,看6集停不下来……' (length=62)
      'num' => string '0' (length=1)
      'cate_id' => string '1' (length=1)
      'category' => 
        array (size=2)
          'cid' => string '2' (length=1)
          'c_name' => string '娱乐' (length=6)
  2 => 
    array (size=5)
      'article_id' => string '3' (length=1)
      'article_title' => string '买数据?官媒评蔡徐坤新歌转发一亿次“不简单”' (length=66)
      'num' => string '0' (length=1)
      'cate_id' => string '1' (length=1)
      'category' => null
  3 => 
    array (size=5)
      'article_id' => string '4' (length=1)
      'article_title' => string '买数据?官媒评蔡徐坤新歌转发一亿次“不简单”' (length=66)
      'num' => string '0' (length=1)
      'cate_id' => string '1' (length=1)
      'category' => null
  4 => 
    array (size=5)
      'article_id' => string '5' (length=1)
      'article_title' => string '蒋勤勤生日晒二胎儿子照 陈建斌特意赶回为她庆生' (length=67)
      'num' => string '0' (length=1)
      'cate_id' => string '1' (length=1)
      'category' => null
  5 => 
    array (size=5)
      'article_id' => string '6' (length=1)
      'article_title' => string 'php的发展前景怎样' (length=24)
      'num' => string '8' (length=1)
      'cate_id' => string '2' (length=1)
      'category' => null
  6 => 
    array (size=5)
      'article_id' => string '7' (length=1)
      'article_title' => string '67岁宋春丽与聂远出新戏,满头花发让人心疼,面容慈祥豪爽依旧!' (length=89)
      'num' => string '12' (length=2)
      'cate_id' => string '2' (length=1)
      'category' => null
  7 => 
    array (size=5)
      'article_id' => string '8' (length=1)
      'article_title' => string '知微又涨粉啦!《天盛长歌》小衣衣、楚王和金狮王子你会选谁?' (length=87)
      'num' => string '18' (length=2)
      'cate_id' => string '2' (length=1)
      'category' => null
  8 => 
    array (size=5)
      'article_id' => string '9' (length=1)
      'article_title' => string '刘亦菲穿旗袍带仙气,赵丽颖穿旗袍优雅,她穿旗袍最有民国范' (length=84)
      'num' => string '14' (length=2)
      'cate_id' => string '2' (length=1)
      'category' => null