灰太狼
- 灰太狼 回复了话题 联表怎么去掉子表多余得字段
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个金钱
- 灰太狼 回复了话题 Fecshop 1.7.2.0 版本发布
刚刚打开看了一下结构,通过预加载配置组件文件(这个是应该是模仿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个金钱