零零零
- 零零零 2019-07-29 已签到连续签到1天,获得了5个金钱
- 零零零 赞了回答
碰巧今天我也遇到这个问题,
->asArray()
和fields()
方法不能同时使用,最后是只用fields
方法,不使用->asArray();
我只需要关联表里的一个 name 字段,并且去除driver_installed_num
字段。public function fields() { $fields=parent::fields(); $fields['name']=function($model){ return ($store=$model->store) ? $store->name : ''; }; unset($fields['driver_installed_num']); return $fields; }
这样写:
$lines = self::find() ->with(['content' => function($query) { $query->select(["id", "reserve", "change", ...]); }]) ->with(['extend' => function($query) { $query->select([...]); }]) ->with(['details' => function($query) { $query->select([...]); }]) ->orderBy('addtime Desc') ->asArray() ->all();
大佬,这个你亲测有效嘛?这样不还是没有走fields()方法嘛,(content的内容是有)没有unset掉指定的字段,我是希望既能走fields又能使用with获取其他关联表的数据
- 零零零 赞了回答
我觉得按分层架构思想来处理,不应该是有数据模型层来处理转换,应该是创建一个filter(继承yii的filter)行为对数据进行转化,并且通过策略选择映射模式,这样,封装一个filter,就可以在所有模型和控制器提交之前做处理,只需要根据提交的不同表进行策略映射就行了。底层模型不要改动,ar模型只接受表映射的字段。如果上层提交过来的结构不满足,问题是出在上层,不应该要模型做改动。
- 零零零 2019-07-04 已签到连续签到1天,获得了5个金钱
- 零零零 收藏了教程Yii2框架底层分析,服务定位器