0

我正在写一个包含区域和人口的可搜索表。这是基本查询:

public function getCountryData()
  {
    $co = DB::table('countries')->leftJoin('country_detail','country_detail.country_id','=','countries.id')->addSelect(['countries.id','countries.name','country_detail.capital','country_detail.area','country_detail.iso3','country_detail.population','country_detail.currencyName','country_detail.phone','country_detail.continent'])->get();
    return Datatables::of($co)
    ->addColumn('action', function($co){
                            $btn = '<div style="float:right">
                            <a href="'. route('country.edit',$co->id) .'  " class="btn btn-outline-secondary btn-xs" title="edit" style="margin-right:.5em">'.getEditIcon().'</a><a href="'. route('country.show', $co->id) .'" class="btn btn-outline-secondary btn-xs" title="images" style="margin-right:.5em">'.getBinoculars().'</a>';

                             return $btn;
                     }) ->rawColumns(['action'])
                 ->make(true);

  }

在我看来,这一切都很好,除了人口字段,例如,返回类似 29121286 的东西,当然我想格式化它,所以它是 29,121,286。

这可以在查询中完成还是在数据表本身中完成?

4

2 回答 2

1

我建议不要使用 javascript 在客户端格式化数字,而是使用 php 的number_format函数来格式化您的数字。

return Datatables::editColumn('population', function($item) {
    return number_format($item->population);
});

有关格式化数字的更多帮助,请参阅https://www.php.net/manual/en/function.number-format.php

于 2020-01-01T12:13:00.540 回答
0

感谢 Laracasts 上的 Navok,这就是答案。

首先,您需要一个 javascript 函数将字符串转换为格式正确的数字。

function formatNumber(num) {
  return num.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,')
} 

我已将其添加到一个名为 misc.js 的文件中(因此我可以拥有其他东西),我从 layouts.app 调用该文件,因此它在系统范围内可用。

这可以在https://blog.abelotech.com/posts/number-currency-formatting-javascript/找到。

然后在页面上的数据表声明中添加

createdRow: function (row, data, dataIndex) {
        if (data.population !== undefined) {
            // 4 here is the cell number, it starts from 0 where this number should appear
            $(row).find('td:eq(4)').html(formatNumber(data.population)); 
        }
    },

我希望这是有价值的。

于 2019-12-30T10:28:23.340 回答