Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

QueryException.php update formatMessage to use getRawSql method#57958

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Draft
akaDJon wants to merge2 commits intolaravel:12.x
base:12.x
Choose a base branch
Loading
fromakaDJon:patch-1

Conversation

@akaDJon
Copy link

@akaDJonakaDJon commentedNov 28, 2025
edited
Loading

Fix: Improve SQL query rendering in QueryException

Problem

This Pull Request addresses an issue where the SQL query displayed in a database exception message (e.g., inQueryException::formatMessage) was rendered incorrectly, specifically within theVALUES clause ofINSERT statements.

When binding parameters if a value wasempty or NULL, the formatting logic sometimes failed to explicitly render the corresponding value or placeholder, resulting in two commas appearing sequentially in the displayed SQL:..., value1, , value3, ....

This faulty rendering led developers to believe there was asyntax error in the generated SQL (an incorrect number of parameters/values), when the actual issue was only in thedisplay logic of the exception handler.

The incorrect formatting masked the true structure of the query and the bound parameters, hindering debugging efforts.

Example of Incorrect Rendering:

insert into"jos_iwa_doc_students2_requests" ("actualresidenceplace__cat_kato", "actualresidenceplace__kator", "actualresidenceplace_address", "actualresidenceplace_country", "actualresidenceplace_switch", "arrival__cat_kato", "arrival__kator", "arrival_country", "author_access", "awards_switch", "benefits_switch", "birthplace__cat_kato", "birthplace__kator", "birthplace_country", "birthplace_switch", "cat2_controller_list", "cat2_student_requests_tag", "cat2_student_type", "cat2_study_curriculum_type", "cat2_study_degree_types", "cat2_study_term__group", "cat_advertising", "cat_buh_discounts", "cat_buh_discounts_size", "cat_buh_source_financing", "cat_buh_surcharge", "cat_individual_citizenship", "cat_individual_gender", "cat_individual_maritalstatus", "cat_individual_nationality", "cat_individual_passportdepartment", "cat_individual_passporttype", "cat_structureuz_faculties", "cat_student_status", "cat_study_formationtypes", "cat_study_forms", "cat_study_languages", "cat_study_level_program", "cat_study_period", "cat_study_spec", "cat_study_years", "cat_study_yearscourse", "checked_out", "checked_out_time", "code", "competitions_switch", "created", "created_by", "current_gpa", "current_kzcs_all", "current_kzcs_done", "datebirth", "discount_switch", "discounts_term", "doc_date", "doc_study2_calendar", "doc_study2_transcript_journal", "doctorlistener__certificate_date", "doctorlistener__certificate_number", "doctorlistener__certificate_serial", "doctorlistener__enroll_year", "doctorlistener__epvo_dict_center_university", "doctorlistener__graduation_year", "doctorlistener__remain_switch", "doctorlistener__spec_code", "doctorlistener__spec_name_en", "doctorlistener__spec_name_kz", "doctorlistener__spec_name_ru", "dorm_need_switch", "dorm_provided_switch", "email", "email_personal", "enroll__doc_students2_orders", "enroll_order_date", "enroll_order_num", "enroll_switch", "epvo_ignore", "epvo_org_external_listener", "epvo_org_graduates", "epvo_org_student", "epvo_org_study_forms", "epvo_synced", "firstname", "firstname_en", "funding_program", "graduate__cat2_study_term", "graduate__cat_structureuz_faculties", "graduate__cat_study_academic_degree", "graduate__cat_study_forms", "graduate__cat_study_languages", "graduate__cat_study_masters_directions", "graduate__cat_study_period", "graduate__cat_study_spec", "graduate__cat_study_years", "graduate__certificate_date", "graduate__certificate_number", "graduate__certificate_perfect_switch", "graduate__certificate_serial", "graduate__reg_number", "graduate_switch", "grant_date", "grant_number", "has_transcript_switch", "id", "iin", "iin_prove_switch", "imageupload", "interests_switch", "lastname", "lastname_en", "livepermit_finishdate", "livepermit_startdate", "livepermit_type", "modified", "modified_by", "mshi_status_date", "mshi_status_flag", "passport_date", "passport_date_finish", "passport_file", "passport_issuing", "passport_number", "passport_serial", "phonehome", "phonemobile", "placement_switch", "platonus_id", "published", "remain__cat2_study_curriculum_type", "remain__cat2_study_term__group", "remain__cat_buh_source_financing", "remain__cat_structureuz_faculties", "remain__cat_student_status", "remain__cat_study_formationtypes", "remain__cat_study_forms", "remain__cat_study_languages", "remain__cat_study_level_program", "remain__cat_study_period", "remain__cat_study_spec", "remain__cat_study_years", "remain__cat_study_yearscourse", "remain__firstname", "remain__lastname", "remain__order_date", "remain__order_number", "remain__secondname", "remain_switch", "residenceplace__cat_kato", "residenceplace__kator", "residenceplace_address", "residenceplace_country", "residenceplace_status_locality", "secondname", "social_network_facebook", "social_network_instagram", "social_network_linkedin", "social_network_tiktok", "social_network_twitter", "social_network_vk", "surcharge_switch", "term_offset", "total_tests", "turan_facebook_switch", "turan_instagram_switch", "turan_vk_switch", "turan_youtube_switch", "updated_transcript", "version", "version_xml")values (?, , ,0,0, ?, , ?, {801},0,0, ?, ,0,0,25, {},1,1,1,2, {}, ?, ?,2, ?, ?, ?, ?, ?,2,1,2,1,1,1,1,1,5,28,18,2, ?, ?,17180141,0,2018-07-0200:00:00,801, ?, ?, ?, ?,0,0,2018-07-0200:00:00, ?, ?, ?, ?, ?, ?, ?, ?,0, ?, ?, ?, ?,0,0, , ?, ?,2017-08-28,254,1,0, ?,21721,9797,1,1, Жұлдыз, , ?,4, ?,23, ?, ?, ?, ?, ?,21,2021-06-22,00017912652,0, BD,20223,1, ?, ,0,2661, XXX,0,null,0, XXX, , ?, ?, ?,2018-07-0200:00:00,801,2025-02-0508:36:08,2,2015-07-13, ?, ?, МВД РК , XXX, , ,+7(776)XXX,0,9797,1,1,2,2,2,4,1,1,1,1,5,28,18,4, Жұлдыз, XXX, ?, ?, XXX,1, ?, , ,1,0, XXX, ?, ?, ?, ?, ?, ?,0,0,0,0,0,0,0,0,1,1)

Example of Сorrect Rendering:

insert into"jos_iwa_doc_students2_requests" ("actualresidenceplace__cat_kato", "actualresidenceplace__kator", "actualresidenceplace_address", "actualresidenceplace_country", "actualresidenceplace_switch", "arrival__cat_kato", "arrival__kator", "arrival_country", "author_access", "awards_switch", "benefits_switch", "birthplace__cat_kato", "birthplace__kator", "birthplace_country", "birthplace_switch", "cat2_controller_list", "cat2_student_requests_tag", "cat2_student_type", "cat2_study_curriculum_type", "cat2_study_degree_types", "cat2_study_term__group", "cat_advertising", "cat_buh_discounts", "cat_buh_discounts_size", "cat_buh_source_financing", "cat_buh_surcharge", "cat_individual_citizenship", "cat_individual_gender", "cat_individual_maritalstatus", "cat_individual_nationality", "cat_individual_passportdepartment", "cat_individual_passporttype", "cat_structureuz_faculties", "cat_student_status", "cat_study_formationtypes", "cat_study_forms", "cat_study_languages", "cat_study_level_program", "cat_study_period", "cat_study_spec", "cat_study_years", "cat_study_yearscourse", "checked_out", "checked_out_time", "code", "competitions_switch", "created", "created_by", "current_gpa", "current_kzcs_all", "current_kzcs_done", "datebirth", "discount_switch", "discounts_term", "doc_date", "doc_study2_calendar", "doc_study2_transcript_journal", "doctorlistener__certificate_date", "doctorlistener__certificate_number", "doctorlistener__certificate_serial", "doctorlistener__enroll_year", "doctorlistener__epvo_dict_center_university", "doctorlistener__graduation_year", "doctorlistener__remain_switch", "doctorlistener__spec_code", "doctorlistener__spec_name_en", "doctorlistener__spec_name_kz", "doctorlistener__spec_name_ru", "dorm_need_switch", "dorm_provided_switch", "email", "email_personal", "enroll__doc_students2_orders", "enroll_order_date", "enroll_order_num", "enroll_switch", "epvo_ignore", "epvo_org_external_listener", "epvo_org_graduates", "epvo_org_student", "epvo_org_study_forms", "epvo_synced", "firstname", "firstname_en", "funding_program", "graduate__cat2_study_term", "graduate__cat_structureuz_faculties", "graduate__cat_study_academic_degree", "graduate__cat_study_forms", "graduate__cat_study_languages", "graduate__cat_study_masters_directions", "graduate__cat_study_period", "graduate__cat_study_spec", "graduate__cat_study_years", "graduate__certificate_date", "graduate__certificate_number", "graduate__certificate_perfect_switch", "graduate__certificate_serial", "graduate__reg_number", "graduate_switch", "grant_date", "grant_number", "has_transcript_switch", "id", "iin", "iin_prove_switch", "imageupload", "interests_switch", "lastname", "lastname_en", "livepermit_finishdate", "livepermit_startdate", "livepermit_type", "modified", "modified_by", "mshi_status_date", "mshi_status_flag", "passport_date", "passport_date_finish", "passport_file", "passport_issuing", "passport_number", "passport_serial", "phonehome", "phonemobile", "placement_switch", "platonus_id", "published", "remain__cat2_study_curriculum_type", "remain__cat2_study_term__group", "remain__cat_buh_source_financing", "remain__cat_structureuz_faculties", "remain__cat_student_status", "remain__cat_study_formationtypes", "remain__cat_study_forms", "remain__cat_study_languages", "remain__cat_study_level_program", "remain__cat_study_period", "remain__cat_study_spec", "remain__cat_study_years", "remain__cat_study_yearscourse", "remain__firstname", "remain__lastname", "remain__order_date", "remain__order_number", "remain__secondname", "remain_switch", "residenceplace__cat_kato", "residenceplace__kator", "residenceplace_address", "residenceplace_country", "residenceplace_status_locality", "secondname", "social_network_facebook", "social_network_instagram", "social_network_linkedin", "social_network_tiktok", "social_network_twitter", "social_network_vk", "surcharge_switch", "term_offset", "total_tests", "turan_facebook_switch", "turan_instagram_switch", "turan_vk_switch", "turan_youtube_switch", "updated_transcript", "version", "version_xml")values (null,'','',0,0,null,'',null,'{801}',0,0,null,'',0,0,25,'{}',1,1,1,2,'{}',null,null,2,null,null,null,null,null,2,1,2,1,1,1,1,1,5,28,18,2,null,null,'17180141',0,'2018-07-02 00:00:00',801,null,null,null,null,0,0,'2018-07-02 00:00:00',null,null,null,null,null,null,null,null,0,null,null,null,null,0,0,'',null,null,'2017-08-28','254',1,0,null,21721,9797,1,1,'Жұлдыз','',null,4,null,23,null,null,null,null,null,21,'2021-06-22','00017912652',0,'BD','20223',1,null,'',0,2661,'XXX',0,'null',0,'XXX','',null,null,null,'2018-07-02 00:00:00',801,'2025-02-05 08:36:08',2,'2015-07-13',null,null,'МВД РК','XXX','','','+7(776)XXX',0,9797,1,1,2,2,2,4,1,1,1,1,5,28,18,4,'Жұлдыз','XXX',null,null,'XXX',1,null,'','',1,0,'XXX',null,null,null,null,null,null,0,0,0,0,0,0,0,0,1,1)

@akaDJonakaDJon changed the titleUpdate formatMessage to use getRawSql methodQueryException.php update formatMessage to use getRawSql methodNov 28, 2025
@taylorotwell
Copy link
Member

Tests failing.

@taylorotwelltaylorotwell marked this pull request as draftNovember 28, 2025 13:44
@akaDJon
Copy link
Author

Tests failing.

Very strange errors:

Message was: "A facade root has not been set."

Was It my fault? Ok, I'll see

@akaDJon
Copy link
Author

akaDJon commentedNov 28, 2025
edited
Loading

Ok, I understand. The issue happens because $this->toRawSql() uses the DB facade.
It looks like the same problem as in#20503.

@akaDJon
Copy link
Author

I’d like to propose an alternative solution.

Currently, QueryException does not receive the Connection instance, which makes it impossible to reliably generate the SQL (similar to toRawSql()) inside the exception without relying on facades. This leads to issues in the test environment — specifically the "A facade root has not been set" error.

A cleaner and more robust approach would be to modify the QueryException constructor so that it accepts the Connection object. This would allow the exception to access the grammar and bindings directly, without using facades and without requiring the application container to be bootstrapped.

I’d like to ask whether the team is interested in this approach. If so, I can update the implementation accordingly.

Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment

Reviewers

No reviews

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

2 participants

@akaDJon@taylorotwell

[8]ページ先頭

©2009-2025 Movatter.jp