Используйте DB::raw() с префиксом таблицы

Я бы сделал SUM в запросе с помощью Laravel 5 Query Builder.

return DB::table('table1')->join('table2','table1.id','=','table2.id')
            ->where('table1.user_id','=',$userId)
            ->whereMonth('table2.date', '=', $month )
            ->whereYear('table2.date', '=', $year )->select('table2.*', DB::raw('SUM(table1.count) AS count_single'))->groupby('table2.id')->get();

но моя проблема в том, что у меня есть таблица префиксов (xc_) и ошибка возврата DB::raw

"Column not found: 1054 Unknown column 'table1.count' "

Это проблема с таблицей префиксов, потому что если я поставлю:

$table_prefix = env('DB_TABLE_PREFIX', 'xc_');
DB::raw('SUM('.$table_prefix.'table1.count) AS count_single')

Работает, значит проблема в префиксе, но мне этот способ не нравится, так вот: есть ли способ использовать DB::Raw без указания префиксной таблицы?


person LorenzoBerti    schedule 07.10.2016    source источник
comment
Этот префикс таблицы доступен для всех таблиц?   -  person Ivanka Todorova    schedule 07.10.2016
comment
если все таблицы в вашей базе данных имеют префикс, то... Проверьте эту ссылку, она может вам помочь   -  person Anish    schedule 07.10.2016
comment
Да, префикс есть во всей таблице, и я уже установил правильный префикс в database.php   -  person LorenzoBerti    schedule 07.10.2016


Ответы (1)


DB::raw() используется для создания необработанного выражения, поэтому вы должны использовать полное имя таблицы.

Laravel Query Builder имеет встроенную функцию для получения префикса таблицы DB::getTablePrefix().

Замените приведенный выше код этим, и он будет работать.

return DB::table('table1')
                ->join('table2', 'table1.id', '=', 'table2.id')
                ->where('table1.user_id', '=', $userId)
                ->whereMonth('table2.date', '=', $month)
                ->whereYear('table2.date', '=', $year)
                ->select('table2.*', DB::raw('SUM(' . DB::getTablePrefix() . 'table1.count) AS count_single'))
                ->groupby('table2.id')
                ->get();


Ссылка:

person Raunak Gupta    schedule 07.10.2016
comment
хорошо, поэтому я должен поставить префикс! отлично и спасибо за объяснение! - person LorenzoBerti; 07.10.2016