У меня есть проект генератора Infyom Laravel, и я использовал Yajra Datatable для создания отчета. В моем отчете должен быть столбец, в котором указано количество других полей в моей таблице.
Я создал таблицу членов с этими полями:
chat_id, username, fname, lname, mobile, referal, credit
Мой запрос:
$subQuery = "SELECT COUNT(referal) FROM members GROUP BY referal having(referal=q1.chat_id)";
$rawquery = "SELECT *,(".$subQuery.") as referal_no from members as q1";
$result = DB::select(DB::raw($rawquery));
В $ result у меня есть объект. Мне нужен объект-строитель в datatable метод query (). Как я мог достичь этого результата?
Вот мой полный код данных:
class MemberDataTable extends DataTable
{
/**
* Build DataTable class.
*
* @param mixed $query Results from query() method.
* @return \Yajra\DataTables\DataTableAbstract
*/
public function dataTable($query)
{
$dataTable = new EloquentDataTable($query);
$dataTable->setTransformer(new MemberTransformer());
return $dataTable->addColumn('action', 'members.datatables_actions');
}
/**
* Get query source of dataTable.
*
* @param \App\Models\Post $model
* @return \Illuminate\Database\Eloquent\Builder
*/
public function query(Member $model)
{
$subQuery = "SELECT COUNT(referal) FROM members GROUP BY referal having(referal=q1.chat_id)";
$rawquery = "SELECT *,(".$subQuery.") as referal_no from members as q1";
$sql = DB::raw($rawquery);
$result = DB::select($sql);
return $result;
}
/**
* Optional method if you want to use html builder.
*
* @return \Yajra\DataTables\Html\Builder
*/
public function html()
{
return $this->builder()
->columns($this->getColumns())
->minifiedAjax()
->addAction(['width' => '80px'])
->parameters([
'dom' => 'Bfrtip',
'order' => [[0, 'desc']],
'buttons' => [
'create',
'export',
'print',
'reset',
'reload',
],
]);
}
/**
* Get columns.
*
* @return array
*/
protected function getColumns()
{
$column = [
'id',
'chat_id',
'username',
'fname',
'lname',
'mobile',
'referal',
'credit',
'referal_no'
];
return Common::addDataTablesAttributesToColumnHeaders($column);
}
/**
* Get filename for export.
*
* @return string
*/
protected function filename()
{
return 'membersdatatable_' . time();
}
}
Задача ещё не решена.
Других решений пока нет …