零零零

零零零

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

  • 财富值455
  • 威望值0
  • 总积分625

个人信息

  • 2019-07-29 已签到
    连续签到1天,获得了5个金钱
  • 回复了 的回答

    可以查看下我之前的提问:https://www.yiichina.com/question/4299
    也许对你有帮助!

    看了,看不懂

  • 赞了回答

    碰巧今天我也遇到这个问题,->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模型只接受表映射的字段。如果上层提交过来的结构不满足,问题是出在上层,不应该要模型做改动。

    感谢大佬的讲解

  • 赞了回答

    我觉得按分层架构思想来处理,不应该是有数据模型层来处理转换,应该是创建一个filter(继承yii的filter)行为对数据进行转化,并且通过策略选择映射模式,这样,封装一个filter,就可以在所有模型和控制器提交之前做处理,只需要根据提交的不同表进行策略映射就行了。底层模型不要改动,ar模型只接受表映射的字段。如果上层提交过来的结构不满足,问题是出在上层,不应该要模型做改动。

  • 2019-07-04 已签到
    连续签到1天,获得了5个金钱
  • 收藏了教程
    Yii2框架底层分析,服务定位器
主管 等级规则
625/1000
资料完整度
10/100
用户活跃度
0/100

Ta的关注

0

Ta的粉丝

0

Ta的访客

4