Внедрение Laravel DataTables Service и соединения - PullRequest
0 голосов
/ 21 сентября 2018

Не могу понять простую задачу: объединить 1 таблицу и добавить столбец.Здесь нет полезной документации о реализации сервиса: DataTables как реализация сервиса

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-Datatables Версия 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 будут в порядке, я вижу правильную ату, исходящую из бэкэнда.

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Решил проблему, выполнив это:

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 (), и они оба ожидают различного типа формата массива.Поэтому самый простой способ - извлечь ключ имени и поместить его в метод выбора query ().

0 голосов
/ 21 сентября 2018

надеюсь, что это будет работать для вас, если нет, то дайте мне знать

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

return $this->applyScopes($query);

protected function getColumns()
{
     return 'manufacturers.id'
}
...