Использование функций SQL в инструкции eloquent select

#laravel #eloquent

#laravel #eloquent

Вопрос:

Я использую Laravel Framework 6.16.0 .

Я хочу выбирать данные с помощью функций sql, таких как CONCAT('Q', QUARTER(transaction_date)) .

Однако я получаю сообщение об ошибке:

 Column not found: 1054 Unknown column 'CONCAT('Q', QUARTER(transaction_date))' in 'field list'
 

Запрос выглядит следующим образом:

 $days = 365 * 2; // two years

$trx = DB::connection('mysql_prod')->table('product')->select(array("transaction_date", "CONCAT('Q', QUARTER(transaction_date))", "YEAR(transaction_date)", "trx_type", "amount_range", "transaction_value", "symbol"))
    ->leftJoin('companies', 'product.companies_id', '=', 'companies.id')
    ->leftJoin('persons', 'persons.id', '=', 'product.persons_id')
    ->where('companies.symbol', '=', $s->symbol)
    ->where('persons.person_type', '=', 'manager')
    ->whereDate('transaction_date', '>=', Carbon::now()->subDays($days))
    ->orderBy('transaction_date', 'desc')
    ->get();
 

Есть предложения, как использовать SQL-функции в инструкции eloquent select?

Ценю ваш ответ!

Комментарии:

1. вам нужно будет использовать a DB::raw для содержимого CONCAT, поскольку он думает, что вы пытаетесь выбрать «столбцы» с помощью select

Ответ №1:

Как заявил @lagbox в своем комментарии,

Вы должны изменить "CONCAT('Q', QUARTER(transaction_date))" на DB::raw("CONCAT('Q', QUARTER(transaction_date))")

 $days = 365 * 2; // two years

$trx = DB::connection('mysql_prod')->table('product')->select(array("transaction_date", DB::raw("CONCAT('Q', QUARTER(transaction_date))"), "YEAR(transaction_date)", "trx_type", "amount_range", "transaction_value", "symbol"))
    ->leftJoin('companies', 'product.companies_id', '=', 'companies.id')
    ->leftJoin('persons', 'persons.id', '=', 'product.persons_id')
    ->where('companies.symbol', '=', $s->symbol)
    ->where('persons.person_type', '=', 'manager')
    ->whereDate('transaction_date', '>=', Carbon::now()->subDays($days))
    ->orderBy('transaction_date', 'desc')
    ->get();