【问题标题】:Laravel DataTables Service implementation and JoinsLaravel DataTables 服务实现和连接
【发布时间】:2019-02-26 05:15:12
【问题描述】:

想不出简单的任务:加入 1 个表并添加列。这里没有关于服务实现的有用文档:DataTables as a Service Implementation

public function query()
{
    $query = Technika::query()
      ->join('manufacturers','technika.manufacturer_id','=','manufacturers.id')
      ->select($this->getColumns());

    return $this->applyScopes($query);
}

protected function getColumns()
{
    return [
      'manufacturers.id',
    ];
}

上面会触发奇怪的错误

Requested unknown parameter 'manufacturers.id' for row 0, column 0

尝试了许多变体,例如:

return [
    'id',
];

上面会触发Column 'id' in field list is ambiguous

另一个是:

return [
  [
    'name' => 'id',
    'data' => 'id'
  ]
];

这将导致:strtolower() expects parameter 1 to be string, array given

等等等等。也许有人可以给出使用服务实现的基本连接示例?

系统详情

  • 操作系统 OSX
  • PHP 版本 7.2
  • Laravel 5.5 版
  • Laravel 数据表 8.0 版

更新 #1

这个接缝最接近工作解决方案:

public function query()
    {
        $query = Technika::query()
            ->join('manufacturers','technika.manufacturer_id','=','manufacturers.id')
            ->select( $this->getColumns() );

        return $this->applyScopes($query);
    }

protected function getColumns()
    {
        return [
            'technika.id',
            'manufacturers.title'
        ];
    }

但我收到了Requested unknown parameter 'technika.id' for row 0, column 0.

但是 XHR 响应接缝没问题,我可以看到来自后端的正确数据。

【问题讨论】:

    标签: php laravel datatables laravel-datatables


    【解决方案1】:

    通过这样做解决了问题:

    protected function getColumns()
    {
        return [
            [ 'data' => 'id', 'name' => 'technika.id', 'title' => 'ID' ],
            [ 'data' => 'title', 'name' => 'manufacturers.title', 'title' => 'Manufacturer' ]
        ];
    }
    
    public function query()
    {
        $query = Technika::query()
            ->join('manufacturers','technika.manufacturer_id','=','manufacturers.id')
            ->select( collect($this->getColumns())->pluck('name')->toArray() );
    
        return $this->applyScopes($query);
    }
    

    getColumns 方法用于 query() 和 html() 中,它们都期望不同类型的数组格式。所以最简单的方法就是提取name key ant放到query() select方法中。

    【讨论】:

    • 可以搜索和排序吗?
    【解决方案2】:

    希望这对你有用,如果没有,请告诉我

    $query = Technika::query()
    ->select($this->getColumns())
    ->join('manufacturers','technika.manufacturer_id','=','manufacturers.id')
     ->get();
    
    return $this->applyScopes($query);
    
    protected function getColumns()
    {
         return 'manufacturers.id'
    }
    

    【讨论】:

    • 嗨,谢谢,但没有。你不能做 get() 因为 applyScopes 期望构建器实例而不是集合。而getColumns我需要返回不止一列,它应该是一个数组。
    • 你可以用逗号(,) saprate它你不应该重新调整数组
    猜你喜欢
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 2016-09-05
    • 2018-11-01
    • 1970-01-01
    相关资源
    最近更新 更多