V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
JasonTsang
V2EX  ›  PHP

Laravel 使用 paginate 分页后 怎么修改其中的数据?

  •  
  •   JasonTsang · 2020-02-15 06:17:41 +08:00 · 7306 次点击
    这是一个创建于 1779 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在用 LARAVEL 时 不知怎么修改 paginate 分页后返回的数据。 图片

    26 条回复    2021-05-31 10:58:51 +08:00
    sun522198558
        1
    sun522198558  
       2020-02-15 08:21:43 +08:00 via iPhone
    view 层判断
    zachlhb
        2
    zachlhb  
       2020-02-15 08:23:39 +08:00 via Android
    model 层访问器
    triptipstop
        3
    triptipstop  
       2020-02-15 08:29:54 +08:00
    page 对象可以拆开了再组回去
    dump 出来看看 就清楚了
    DavidNineRoc
        4
    DavidNineRoc  
       2020-02-15 09:13:22 +08:00
    直接看分类类的源码就能知道了。
    这个对象直接遍历是遍历他的数据而不是他的属性。
    所以只要你 foreach 它,然后修改遍历的属性就可以修改了。
    Stevenv
        5
    Stevenv  
       2020-02-15 09:17:50 +08:00
    返回的是个对象,你可以直接遍历处理数据。。
    linxl
        6
    linxl  
       2020-02-15 09:26:45 +08:00
    https://learnku.com/docs/laravel/5.5/eloquent-mutators/1335
    用这个, 新增一个方法例如 getStatusNameAttribute
    JasonTsang
        7
    JasonTsang  
    OP
       2020-02-15 13:44:33 +08:00 via iPhone
    @Stevenv 事实上却不行,说数据受保护。
    JasonTsang
        8
    JasonTsang  
    OP
       2020-02-15 13:45:18 +08:00 via iPhone
    @zachlhb 不懂,我是新手,能直接点告诉我么??
    JasonTsang
        9
    JasonTsang  
    OP
       2020-02-15 13:45:50 +08:00 via iPhone
    @linxl 这么隆重么???我只想改一下结果
    JasonTsang
        10
    JasonTsang  
    OP
       2020-02-15 13:57:35 +08:00
    @triptipstop 访问都访问不了 如何拆 如何组? Cannot access protected property Illuminate\\Pagination\\LengthAwarePaginator::$items
    linxl
        11
    linxl  
       2020-02-15 14:07:39 +08:00
    @JasonTsang 这个挺简单的, 也不会影响原有 status 字段, 更合理
    JasonTsang
        12
    JasonTsang  
    OP
       2020-02-15 14:13:57 +08:00
    @linxl 这不合理啊 每修改一个属性都要写一个方法,这太麻烦了吧
    kiddyu
        13
    kiddyu  
       2020-02-15 14:52:29 +08:00
    要遍历的不应该是 $list 么,为啥要遍历 $list->items->items
    JasonTsang
        14
    JasonTsang  
    OP
       2020-02-15 15:04:22 +08:00
    @kiddyu 哈哈哈 大哥 你没用 laravel 吧,paginate 分页返回的是一个对象,对象下一个属性保存数据。哪个结构怪复杂的。
    kiddyu
        15
    kiddyu  
       2020-02-15 15:19:45 +08:00
    @JasonTsang #14 你试试就知道了
    4ark
        16
    4ark  
       2020-02-15 15:41:56 +08:00 via Android
    这种需求最标准的解决方案是用 #6 的方法,至于你觉得修改一个属性都要写一个方法是麻烦的话,我敢肯定你的代码到时候一定不好维护
    FragmentLs
        17
    FragmentLs  
       2020-02-15 16:02:37 +08:00
    就如 @kiddyu 说的,LZ 你遍历错了...paginate 返回的是 collection.
    stevenhawking
        18
    stevenhawking  
       2020-02-15 16:53:31 +08:00
    $paginate->getCollection()->transform(function($item) {
    $item->id ++;
    return $item;
    });
    zachlhb
        19
    zachlhb  
       2020-02-16 08:25:12 +08:00 via Android
    @JasonTsang 方法 6 楼有人说了,这个方法最简单,而且易于扩展,如果你在这处逻辑更改了字段,其他地方也要用呢?再写一次?使用 laravel 就要了解他的分层,每一层各司其职,实现低耦合高内聚
    JasonTsang
        20
    JasonTsang  
    OP
       2020-02-17 05:09:52 +08:00
    @zachlhb 你们都错了 ,这个可以直接遍历项,
    foreach($list->items() as $v){
    $v->status = $v->status == 1?"正常":"禁用";
    }
    JasonTsang
        21
    JasonTsang  
    OP
       2020-02-17 05:12:21 +08:00
    @zachlhb 你们都错了 ,这个可以直接遍历项,没有你们想得这么复杂,看来你们也不了解 laravel paginate 分页返回的对象。我查了很久 最后翻到 stackflow 才看到。
    foreach($list->items() as $v){
    $v->status = $v->status == 1?"正常":"禁用";
    }
    Niphor
        22
    Niphor  
       2020-02-17 16:03:46 +08:00
    去加个 resource 层 随便怎么变
    zachlhb
        23
    zachlhb  
       2020-02-20 10:52:11 +08:00 via Android
    @JasonTsang 是可以直接直接遍历啊,但是不推荐这样,因为不利于后期维护
    zachlhb
        24
    zachlhb  
       2020-02-20 10:54:11 +08:00 via Android
    @JasonTsang 既然你用了框架,是不是应该尽量使用框架的东西,否则合并用框架,框架的目的就是规范写法,利用后期维护的
    ShareManT
        25
    ShareManT  
       2021-05-29 11:54:48 +08:00
    @zachlhb 瞎扯! laravel 官方在对象上留的 items() 方法就是拿来这样用的。
    zachlhb
        26
    zachlhb  
       2021-05-31 10:58:51 +08:00 via iPhone
    @ShareManT 是可以这么用,但所有地方都自行遍历一次改如果后期发生变化有你改的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2570 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 07:15 · PVG 15:15 · LAX 23:15 · JFK 02:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.