NingerJohn

NingerJohn

这家伙有点懒,还没写个性签名!

  • 财富值1315
  • 威望值0
  • 总积分5385

个人信息

  • 回复了 的回答

    今天我研究了一下,我来分享下:

    三张表:

    1. 文章表:article(id, article_name)
    2. 标签表:tag(id, tag_name)
    3. 文字和标签对应表 article_tag (id, article_id, tag_id);

    三个表模型生成,其中在文章ArticleModel 中增加:

     public function getTags()
        {
            return $this->hasMany(Tag::className(), ['id' => 'tag_id'])
                        ->viaTable('{{%article_tag}}', ['article_id' => 'id'])
                        ->asArray();
        }
    

    我要获取 文章id为 1 对应的所有标签;

            $model = Article::findOne(1);
            $data = $model->tags;
            var_dump($data);die;
    

    结果如下:

    array (size=3)
      0 => 
        array (size=2)
          'id' => string '1' (length=1)
          'tag_name' => string 'php' (length=3)
      1 => 
        array (size=2)
          'id' => string '6' (length=1)
          'tag_name' => string '技术' (length=6)
      2 => 
        array (size=2)
          'id' => string '7' (length=1)
          'tag_name' => string '大牛' (length=6)
    

    你好,问个问题。假设场景如下,想查出来每个用户购买商品的积分,用户有推荐人和购买人2个角色,也就是说用户表和订单表是2个字段or关联的方式。这种如何用hasMany描述?
    用户表 : user ( uid, name )
    订单表 : order ( order_id, recommend_uid, buy_uid )
    订单商品表 : order_item ( item_id, order_id, recommend_jifen, buy_jifen )

     public function getJifens()
        {
            return $this->hasMany(OrderItem::className(), ['item_id' => 'uid'])
                        ->viaTable('order', ['recommend_uid' => 'uid', 'buy_uid'=>'uid']) // 这个地方如何指定 on uid=recommend_uid or uid = buy_uid
                        ->asArray();
        }
    

    如果用sql查询的话,应该是这样的

    SELECT
    	uid,
    	SUM(
    	    CASE
    		    WHEN u.uid = o.recommend_id THEN
    		    oi.recommend_jifen 
    		    WHEN u.uid = o.buy_uid THEN
    		    oi.buy_jifen 
           ELSE 0 END
    	)
    FROM
    	USER u
    	LEFT JOIN ORDER o ON o.recommend_uid = u.uid OR o.buy_uid = u.uid
       LEFT JOIN order_item oi ON oi.item_id = o.order_id
    
  • 赞了说说
    已经成功从PHP转成了java工程师,现在正在开发grails项目。
  • 2016年就写出来这种代码了,厉害,后生可畏!

  • 收藏了教程
    Yii2 教程 - yii2-redis 扩展详解
  • 写的很不错,对于新手帮助很大。谢谢。期待整个教程的完结,让更多和我一样的新人更好的理解Yii框架

  • 你好,我在model里面配置了TimestampBehavior,更新的时候,update_time字段确实可以自动更新。那么在某些时候,我想临时取消TimestampBehavior行为,应该怎么操作呢?试过了detachBehavior,最终save的时候,update_time字段还是会自动更新
    `

    public function behaviors()
    {
        return [
            [
                'class'=>TimestampBehavior::className(),
                'attributes' => [
                    ActiveRecord::EVENT_BEFORE_INSERT=>['add_time', 'update_time'],
                    ActiveRecord::EVENT_BEFORE_UPDATE=>['update_time'],
                ],
            ],
            [
                'class'=>ProjectBehavior::className()
            ],
        ];
    }
    

    `

副总裁 等级规则
5385/10000
资料完整度
30/100
用户活跃度
10/100

Ta的关注

6

Ta的粉丝

4

Ta的访客

26