2016-07-27 11:11:34 2554次浏览 5条回答 0 悬赏 10 金钱

控制器中的

 public function actionList(){
        $list = Article::find()
            ->joinWith('articleCategory')
            ->where(['category_id'=>'id'])
            //->orderBy('id DESC')
            ->all();

        //$sql = 'SELECT a.*,c.category as category FROM yii2_article a,yii2_article_category c WHERE a.category_id=c.id';

        var_dump($list);die();

        return $this->render('list',[
            'list'=>$list
        ]);
    }

model中

    public function getArticleCategory(){
        return $this->hasOne(ArticleCategory::className(),['id'=>'category_id'])->asArray();
    }

我想要查出文章的栏目信息,怎么写呢?

  • 回答于 2016-07-27 11:48 举报

    $query = new Query();

        $query->select('*') //查询字段
        ->from(Article::tableName.'a')   //a 是表的别名
        ->leftJoin(articleCategory::tableName.'ac','ac.category_id = a.id');
        
        $data= $query->all();
    
    2 条回复
    回复于 2016-07-27 13:55 回复

    sql是这样的$sql = 'SELECT a.*,c.category as category FROM yii2_article a,yii2_article_category c WHERE a.category_id=c.id';
    ,你上面这个我的还是不正确。

    回复于 2016-07-27 14:10 回复

    你在加一个where查询条件试试

  • 回答于 2016-07-27 11:50 举报

    你的list中没有?

    4 条回复
    回复于 2016-07-27 13:45 回复

    list中是空的,我的可能不对,出来是空的。

    回复于 2016-07-27 14:15 回复

    ...->all()->asArray();

    回复于 2016-07-27 14:26 回复

    还是空的。

    回复于 2016-07-27 15:32 回复

    生成语句拿到mysql下去跑下,看结果是否也为空。

  • 回答于 2016-07-27 15:13 举报

    model里面关系都定义好了,干嘛还要在控制器里面写joinwith呢,如果ArticleCategory这个表里面有个字段是name,应该可以直接在视图层里面写'articleCategory.name'就可以了啊

    1 条回复
    回复于 2016-07-27 16:45 回复

    才学yii2不知道,怎么使用model中的那个关系,所以用joinwith了。

  • 回答于 2016-07-27 15:22 举报
    $query = (new Query())->select('a.*,c.category as category')
                ->form('yii2_article as a')
                ->leftJoin('yii2_article_category as c', 'a.category_id = c.id')
                ->all();
    
    1 条回复
    回复于 2016-07-27 16:43 回复

    谢谢你了。这样可以了。可能是我哪里不对。我又试出了另一种方法。
    $sql = 'SELECT a.*,c.category as category FROM yii2_article a,yii2_article_category c WHERE a.category_id=c.id';

        $list = Yii::$app->db->createCommand($sql)->queryAll();
    
  • 回答于 2016-07-29 09:59 举报

    这样写,试一试:

    控制器中: 
     public function actionList(){
            $list = Article::find()
                ->joinWith([
                  'articleCategory'=>function($query){  $query->select(['id','category'])},
                ])->asArray()
                ->all();
    
    
            var_dump($list);die();
    
            return $this->render('list',[
                'list'=>$list
            ]);
        }
    
    模型中: 
      public function getArticleCategory(){
            return $this->hasOne(ArticleCategory::className(),['id'=>'category_id']);
        }
    
    
您需要登录后才可以回答。登录 | 立即注册
moka同学
经理

moka同学 杭州

注册时间:2016-03-31
最后登录:2020-03-14
在线时长:17小时46分
  • 粉丝8
  • 金钱930
  • 威望10
  • 积分1200

热门问题