Laravel数据表对附加字段进行排序

时间:2016-05-20 11:17:14

标签: php mysql laravel datatables eloquent

我的模型ItemsRooms相关,BuildingsLocations相关,与Items相关。

简短:Rooms belongsTo Buildings belongsTo Locations belongsTo ItemController

Items的索引函数处,我想显示Room的表格。我使用Laravel Datatables。它适用于简单的'表,但我遇到了排序/搜索自定义/附加字段的问题,因为它们当然不在表中。

基本上我想加入显示表中每个Building的{​​{1}},LocationItem名称。

这是我的Items模型:

protected $appends = [
    'building_title',
    'location_title',
    'room_title',
];

public function getLocationTitleAttribute() {
    return $this->room->building->location->title;
}

public function getBuildingTitleAttribute() {
    return $this->room->building->title;
}

public function getRoomTitleAttribute() {
    return $this->room->title;
}

这是我的控制器:

public function anyData()
{
    return Datatables::of(Item::query())->make(true);
}

为附加字段启用排序/过滤的最佳方法是什么? 谢谢你的阅读。

1 个答案:

答案 0 :(得分:0)

这是我的解决方案(没有使用附加字段):

public function anyData()
{
    $items = Item::join('rooms', 'items.room_id', '=', 'rooms.id')
        ->join('buildings', 'rooms.building_id', '=', 'buildings.id')
        ->join('locations', 'buildings.location_id', '=', 'locations.id')
        ->select([
            'items.id',
            'items.title',
            'items.label_number',
            'items.fibu_number',
            'rooms.title as room_title',
            'buildings.title as building_title',
            'locations.title as location_title'
        ]);
    return Datatables::of($items)->make(true);
}