Laravel 5 在Eloquent查询或Yarja数据表中格式化数字

Laravel 5 在Eloquent查询或Yarja数据表中格式化数字,laravel-5,eloquent,laravel-datatables,Laravel 5,Eloquent,Laravel Datatables,我正在写一个可搜索的表格,其中包括面积和人口。以下是基本查询: public function getCountryData() { $co = DB::table('countries')->leftJoin('country_detail','country_detail.country_id','=','countries.id')->addSelect(['countries.id','countries.name','country_detail.capital

我正在写一个可搜索的表格,其中包括面积和人口。以下是基本查询:

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);

  }
公共函数getCountryData() { $co=DB::table('countries')->leftJoin('country\u detail'、'country\u detail.country\u id'、'='、'countries.id')->addSelect(['countries.id'、'countries.name'、'country\u detail.capital'、'country\u detail.area'、'country\u detail.iso3'、'country\u detail.population'、'country\u detail.currencyName'、'country\u detail.continum'])->>get(); 返回数据表::of($co) ->addColumn('action',函数($co){ $btn= '; 返回$btn; })->rawColumns(['action']) ->使(真实); } 在我看来,所有这些都可以很好地工作,除了人口字段,例如,返回类似于29121286的值,当然我想格式化它,使其为29121286


这可以在查询或数据表本身中完成吗?

多亏了Laracasts上的Navok,下面是答案

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

function formatNumber(num) {
  return num.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,')
} 
我已经在一个名为misc.js的文件中添加了它(这样我就可以有其他东西了),我从layouts.app调用了它,这样它就可以在系统范围内使用

这可在以下网址找到

然后在页面上的datatables声明中添加

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)); 
        }
    },

我希望这是有价值的。

我建议使用php的
number\u format
函数格式化数字,而不是使用javascript在客户端格式化数字

return Datatables::editColumn('population', function($item) {
    return number_format($item->population);
});
有关格式化数字的更多帮助,请参阅