Не могу понять простую задачу: объединить 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
И так далее. Может быть, кто-то просто может дать базовый пример соединения с использованием реализации сервиса?
Этот шов должен быть ближе к рабочему решению:
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 ответные швы должны быть в порядке, я вижу правильную ату, исходящую из бэкэнда.
надеюсь, что это будет работать для вас, если нет, то дайте мне знать
$query = Technika::query()
->select($this->getColumns())
->join('manufacturers','technika.manufacturer_id','=','manufacturers.id')
->get();
return $this->applyScopes($query);
protected function getColumns()
{
return 'manufacturers.id'
}
Решил проблему, выполнив это:
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 (), и они оба ожидают различного типа формата массива. Самый простой способ — извлечь ключ имени и поместить его в метод select () select.