灰太狼

灰太狼

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

  • 财富值3290
  • 威望值150
  • 总积分5550

个人信息

  • 提出了问题
    关联查询 joinWith('abc') 与 ->abc 的区别?
  • 回复了 的回复

    joinWith是定义查询关系数据的

    joinWith('ssdrWtrAddress') 里的 ssdrWtrAddress 肯定有 SsdrWtrInfo 关联模型 里面写着

    public function getSsdrWtrAddress()
    {
    	return $this->hasOne('xxxxxx')->select('你需要的字段1,你需要的字段2');
        //只写需要的字段,也就是去掉其他不需要的字段了
    }
    

    return $this->hasMany('xxxxxx')->select('你需要的字段1,你需要的字段2');

  • joinWith是定义查询关系数据的

    joinWith('ssdrWtrAddress') 里的 ssdrWtrAddress 肯定有 SsdrWtrInfo 关联模型 里面写着

    public function getSsdrWtrAddress()
    {
    	return $this->hasOne('xxxxxx')->select('你需要的字段1,你需要的字段2');
        //只写需要的字段,也就是去掉其他不需要的字段了
    }
    
  • 因为你的 Order 是继承了 ActiveRecord ,而 ActiveRecord 是针对数据表进行映射操作的。
    也就是说,ActiveRecord 的属性赋值都是针对数据表的字段。ActiveRecord 它对应有一个操作的属性数组叫做 $_attribute[]

    $model->attributes = $value; 时候,yii 会去执行 setAttributes()
    给属性赋值,在 setAttributes 方法里给某个属性赋值,如果这个属性不存在会自动调用 __set()
    yii __set() 会把属性和值写到 $_attribute[]
    例如 $_attribute[name] = '小王';
    最后在save的时候会把这个 $_attribute[] 的值写回数据库就实现了保存。

    而你说的 $model->attributes = $value; 为什么没保存到值,上面说了 yii会去执行 setAttributes()
    在给属性赋值的时候如果发现没有这个属性就会去执行__set() 然后写入 $_attribute[]
    很显然你的模型有这个属性,yii就直接给你定一个 publie $fieldX 赋值了。也就是没有走 __set();
    也没有写入 $_attribute[] 在保存的时候 $_attribute[]这里都没有你赋值的这个字段当然保存不聊了。

    如果你想继承ar模型,就不需要自己重新定义字段属性,yii会自动解析数据字段。
    如果你想使用自定义属性就要继承 Model 不要继承 ActiveRecord;

  • 2019-04-18 已签到
    连续签到3天,获得了15个金钱
  • 2019-04-17 已签到
    连续签到2天,获得了10个金钱
  • 刚刚打开看了一下结构,通过预加载配置组件文件(这个是应该是模仿yii)利用了php特性__get实现组件(也就是你定义的service)实现了实例化(这个也是yii的伎俩)。

    自己定义了一个初始化文件在yii2初始化之前。

    整个结构很好,完全实现了组件化开发。扩展,修改方面耦合会很低。

    看到model这里有个小小小小的意见,model可以在加一层table文件存gii生产的模型(也就是初始表模型)然后在用你定义的model继承这个gii生产的表做一些关联查询.

  • 2019-04-16 已签到
    连续签到1天,获得了5个金钱
  • 不会吧,一个json能有2.5M

  • 2019-04-13 已签到
    连续签到3天,获得了15个金钱
副总裁 等级规则
5550/10000
资料完整度
10/100
用户活跃度
0/100

Ta的关注

8

Ta的粉丝

28

Ta的访客

120