Model 获取数据后怎么不改变排序的同时修改数据格式啊

:sweat_smile:

//  CardModel 结构
{
    "id": 1,
    "banlance": 307825005,
    "company": {
        "id": 1,
        "name": "公司名称",
        "telephone": 18512341234,
    }
}

// 获取数据
$cards = Card::isActive()
            ->without(['price'])
            ->orderBy('banlance', 'desc')
            ->limit(20)
            ->get()
            ->mapWithKeys(function ($item) {
                return [$item['id'] => $item['company']['telephone'].' - '.$item['company']['name']];
            });

但是需要的数据是要经过 banlance 排序后的,经过 mapWithKeys 或者map 后 打印出来的数据顺序重置了,怎么杨保持banlance排序的同时修改数据格式啊

{
//  "card_id" :  "company_telephone - company_name",
"1": "18512341234 - 公司名称1",
"2": "185123412341 - 公司名称2",
"3": "185123412342 - 公司名称3",
"9": "185123412343 - 公司名称9",
} 
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 6

直接按排序得到数组,然后用 array_map 自己搞

1年前 评论
$cards = Card::isActive()
            ->without(['price'])
            ->orderBy('banlance', 'desc')
            ->limit(20)
            ->get()
            ->map(function ($item) {
                return [
                     'k'=> $item['id'],
                     'v' => $item['company']['telephone'].' - '.$item['company']['name']
                  ];
            })
           ->keyBy('k')
           ->map(function ($item) {
                return $item['v'];
            })

;
1年前 评论
xolee (楼主) 1年前
Mutoulee

我想到一个追加模型属性的办法,只是多提供一种思路,不谈优劣:

protected $appends = ['xxx'];

定义一个属性访问器:

public function geXxxAttribute(){
    return $this->company['telephone'].' - '.$this->company['name'];

然后使用的时候:

$cards = Card::isActive()
            ->without(['price'])
            ->orderBy('banlance', 'desc')
            ->limit(20)
            ->get()
            ->pluck('xxx', 'id');
1年前 评论
xolee (楼主) 1年前
Mutoulee (作者) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!