Yajra Datatable custom Model Attribute

4.6k views Asked by At

I'm using Yajra Datatables for Laravel and it won't show the custom attribute for my User model. This is my User model:

protected $appends = ['sum_work_hours'];

public function work_hours()
{
    return $this->hasMany(WorkHour::class);
}

public function getSumWorkHoursAttribute()
{
    return $this->work_hours->sum('hours_total');
}

And this is in Controller:

public function showHours()
{
    return view('hour');
}

public function getHoursDatatable()
{
    $users = User::select(['name', 'email', 'sum_work_hours']);

    return Datatables::of($users)->make();
}

And in view:

<link rel="stylesheet" href="https://cdn.datatables.net/1.10.15/css/dataTables.bootstrap.min.css">


<div class="container">
    <div class="row">
        <div class="col-md-12">
            <div class="panel panel-default">
                <div class="panel-heading">All Working Hours</div>

                <div class="panel-body">

                    <table id="users-table" class="table table-striped table-bordered">

                        <thead>
                        <tr>
                            <th>Name</th>
                            <th>Email</th>
                            <th>Sum Work Hours</th>
                        </tr>
                        </thead>

                    </table>

                </div>
            </div>
        </div>
    </div>
</div>


<script src="https://cdn.datatables.net/1.10.15/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/1.10.15/js/dataTables.bootstrap.min.js"></script>
<script type="text/javascript">
    $(function() {
        $('#users-table').DataTable({
            processing: true,
            serverSide: true,
            ajax: 'http://127.0.0.1:8000/datatables/get_hours_datatable',
            columns: [
                { data: 'name' },
                { data: 'email' },
                { data: 'sum_work_hours' }
            ]
        });
    });
</script>

And this is what I get:

enter image description here

What could be wrong?

1

There are 1 answers

2
lewis4u On BEST ANSWER

The problem was in my Controller

public function getHoursDatatable()
{
    // this line was wrong
    $users = User::select(['name', 'email', 'sum_work_hours']);

    return Datatables::of($users)->make();
}

It should have been like this:

$users = User::with('work_hours')->get();

Now I get the results in my table.