JasonTsang
V2EX  ›  PHP

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

  •  
  •   JasonTsang · Feb 15, 2020 · 7905 views
    This topic created in 2305 days ago, the information mentioned may be changed or developed.

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

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