如何在数据表和 laravel 8 的新行中列出用户角色

How can I list user roles in new line in datatables and laravel 8

我正在使用 laravel 8 和数据表,我在我的应用程序中列出了注册用户的数据,一切正常,但我有一个名为角色的列,我想在其中列出所有角色与用户关联的, 我可以通过这种方式获得角色: enter image description here

但我想要的是这样展示角色:

这是我控制器中的代码

//Getting users with the name of associated roles 
    $users = User::with('roles')->get();
    $users = $users->transform(function($item){
        $item->role_names = $item->roles->pluck('name')->implode(' ');
        return $item;
    })->all();

我正在使用 implode 方法来分离数据,我试过使用它在新行中显示信息,但它不起作用

->implode('<br>');

这就是我在 js 文件中呈现数据表的方式:

        "columns" : [
            {data : 'id' , className : 'id'},
            {data : 'name', className : 'name'},
            {data : 'email', className : 'email'},
            {data : 'role_names', className : 'roles'},
            {data : 'status', className : 'status'},
            {data : 'actions', className : 'actions'},
        ]

有什么想法吗?谢谢。

您不应该使用控制器来修改数据的外观,那是视图的工作。在这种情况下,您可以使用数据表 column.render function 使用回调函数按照您希望的方式格式化数据,如下所示:

$('#example').dataTable({
    "columns" : [
        {data : 'id' , className : 'id'},
        {data : 'name', className : 'name'},
        {data : 'email', className : 'email'},
        {data : 'roles', className : 'roles', render: function(data) {
            // data is your array of roles, do what you like with it
            let names = data.map(x => x.name);
            return names.join("<br/>");
            
        }},
        {data : 'status', className : 'status'},
        {data : 'actions', className : 'actions'},
    ]
});