【问题标题】:laravel yajra datatable how to display json data in datatable columnlaravel yajra datatable 如何在 datatable 列中显示 json 数据
【发布时间】:2018-04-26 00:11:35
【问题描述】:

我有一个包含 json 数据的“poin”列的成员表, 示例:

{"IDR":"100", "MYR":"50", "DOLLAR":"25"}

如何使用 datatable 在一个单元格表中显示该 json 数据?

Name  | Poin       |
____________________
User 1|IDR : 100   |
      |MYR : 50    |
      |DOLLAR : 25 |
____________________
User 2|IDR : 50    |
      |MYR : 80    |
      |DOLLAR : 125|

这是控制器

public function query(Request $request)
{
    $query = DB::table('members');

    $result = DataTables::of($query)->make(true);

    return $result;
}

这是blade.php

 var oTable = $('#datatable-responsive').DataTable({
            autoWidth: false,
            processing: true,
            serverSide: true,
            responsive: true,
            ajax: {
                url: "{{route('members.query')}}",
                method: "POST",
                data: function (d) {
                    d.search = $('input[type="search"]').val();
                }
            },
            columns: [
                {data: "name"},
                {data: "poin"},
                {data: "created_at"}
            ]
        });

谢谢

【问题讨论】:

    标签: laravel yajra-datatable


    【解决方案1】:

    首先考虑将 Member 模型中的 JSON 字段转换为数组:

    class Member extends Model
    {
        protected $casts = [
            'poin' => 'array',
        ];
    }
    

    https://laravel.com/docs/5.5/eloquent-mutators#array-and-json-casting

    然后,您可以为模型编写一个转换器,以便在创建数据表时将 JSON 字段 poin 输出为 HTML:

    namespace App\Transformers\Datatables;
    
    use League\Fractal;
    use App\Models\Member;
    
    class MemberTransformer extends Fractal\TransformerAbstract
    {
        public function transform(Member $member)
        {
            return [
                'id'   => $member->id,
                'name' => $member->name,
                'poin' => "IDR: {$member->poin['IDR']} <br> MYR: {$member->poin['MYR']} <br> DOLLAR: {$member->poin['DOLLAR']}"
            ];
        }
    
    }
    

    https://yajrabox.com/docs/laravel-datatables/master/response/fractal

    然后应用转换器...

    public function query(Request $request)
    {
        $model = Member::query();
    
        $result = DataTables::of($model)
            ->setTransformer('App\Transformers\Datatables\MemberTransformer')
            ->toJson();
    
        return $result;
    }
    

    https://yajrabox.com/docs/laravel-datatables/master/engine/eloquent

    您可能需要阅读文档并稍微修改一下此代码,因为我尚未对其进行测试,这只是为了指导您尝试转换器的想法。

    【讨论】:

      猜你喜欢
      • 2018-03-03
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      • 2021-08-02
      • 2018-02-15
      • 1970-01-01
      • 2020-12-26
      • 2019-06-02
      相关资源
      最近更新 更多