Как написать Laravel GroupBy Query? - PullRequest
0 голосов
/ 04 марта 2020

Я попробовал это в laravel, но это не сработало.

$doctor_daily=ReportDoctorCompanyDailyTestModal::select('test_id','doctor.first_name','testing_types.testing_name',DB::raw('SUM(test_price) as num'))
                                                       ->join('testing_types','report_doctor_company_daily_test.test_id','=','testing_types.id')
                                                       ->join('doctor','doctor.id','=','report_doctor_company_daily_test.doctor_id')
                                                       ->groupBy('test_id')
                                                       ->get();

Как написать этот MySQL Запрос в Laravel 5.7?

SELECT
    report_doctor_company_daily_test.test_id,
    testing_types.testing_name,
    doctor.first_name,
    doctor.last_name,
    SUM( report_doctor_company_daily_test.test_price ) 
FROM
    testing_types
    INNER JOIN report_doctor_company_daily_test ON testing_types.id = report_doctor_company_daily_test.test_id
    INNER JOIN doctor ON report_doctor_company_daily_test.doctor_id = doctor.id 
GROUP BY
    testing_types.id

в sql этот запрос работает. как я могу использовать его для laravel

Ответы [ 2 ]

2 голосов
/ 04 марта 2020

Попробуйте эту строку:

$doctor_daily=TestingType::join('report_doctor_company_daily_test', 'testing_types.id', '=', 'report_doctor_company_daily_test.test_id')
                          ->join('doctor', 'report_doctor_company_daily_test.doctor_id', '=','doctor.id')
                          ->groupBy('testing_types.id')
                          ->select('report_doctor_company_daily_test.test_id','testing_types.testing_name','doctor.first_name','doctor.last_name',DB::raw('SUM( report_doctor_company_daily_test.test_price )')
                          ->get();

Ваша mysql версия 5.7+, поэтому проверьте эту ссылку

MySQL 5.7.5 и вверх реализует обнаружение функциональной зависимости. Если включен режим ONLY_FULL_GROUP_BY SQL (по умолчанию), MySQL отклоняет запросы, для которых список выбора

, поэтому проверьте конфигурацию / базу данных. php, если ваш mysql конфигурация strict имеет значение true, вам нужно отключить ONLY_FULL_GROUP_BY, добавить режимы так:

'modes' => [
            //'ONLY_FULL_GROUP_BY',
            'STRICT_TRANS_TABLES',
            'NO_ZERO_IN_DATE',
            'NO_ZERO_DATE',
            'ERROR_FOR_DIVISION_BY_ZERO',
            'NO_AUTO_CREATE_USER',
            'NO_ENGINE_SUBSTITUTION'
           ],

или вы можете просто использовать метод any_value для выбранных столбцов:

PS: any_value не существует в MariaDB

->selectRaw('ANY_VALUE(report_doctor_company_daily_test.test_id),
    ANY_VALUE(testing_types.testing_name),
    ANY_VALUE(doctor.first_name),
    ANY_VALUE(doctor.last_name),
    SUM( report_doctor_company_daily_test.test_price')
1 голос
/ 04 марта 2020

Go для конфигурации / базы данных. php и внутри 'mysql' изменить strict:false. Теперь группа должна работать ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...