Как преобразовать необработанный запрос в elloquent и получить в результате объект построителя

У меня есть проект генератора 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();
}

}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]