NingerJohn
- NingerJohn 回复了 zhaonan420 的回答
今天我研究了一下,我来分享下:
三张表:
- 文章表:article(id, article_name)
- 标签表:tag(id, tag_name)
- 文字和标签对应表 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
- NingerJohn 赞了说说已经成功从PHP转成了java工程师,现在正在开发grails项目。
- NingerJohn 评论了教程 yii2博客学习笔记(三)
2016年就写出来这种代码了,厉害,后生可畏!
写的很不错,对于新手帮助很大。谢谢。期待整个教程的完结,让更多和我一样的新人更好的理解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() ], ]; }
`