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

У меня есть проект генератора Infaraom 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 ответов

Другие вопросы по тегам