【问题标题】:Yajra Datatable custom Model AttributeYajra Datatable 自定义模型属性
【发布时间】:2017-09-03 19:44:46
【问题描述】:

我正在为 Laravel 使用 Yajra 数据表,它不会显示我的用户模型的自定义属性。这是我的用户模型:

protected $appends = ['sum_work_hours'];

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

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

这是在控制器中:

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

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

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

并且在视图中:

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

这就是我得到的:

可能出了什么问题?

【问题讨论】:

  • 数据库表中不存在该列“sum_work_hours”,可能是因为...但是如何解决这个问题?
  • OK 在我看来,我已经修复了它......但是这个查询需要大约 7 秒来呈现表格......

标签: laravel datatables yajra-datatable


【解决方案1】:

问题出在我的控制器中

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

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

应该是这样的:

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

现在我的表格中得到了结果。

【讨论】:

  • 所有在模型内$appends 数组中注册的自定义属性将自动作为属性加载。所以你可以在你的用户模型中做$appends = ['sum_work_hours'];
  • 我已经这样做了,这是我的下一个问题:stackoverflow.com/questions/46027556/…
猜你喜欢
  • 1970-01-01
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多