Laravel에서 vendor 내의 처리를 재정의하는 방법

실제로 치는 문제



htps : // 기주 b. 코 m / 야 j 등 / ぁ 라 ょ l- 오시 8
yajra/laravel-oci8에 의존하는 구현에서 ORACLE의 예약어 열을 포함하는 쿼리를 실행하려고하면 실패합니다.

오류 로그 예

[2019-07-20 15:06:06] local.ERROR: Error Code    : 904
Error Message : ORA-00904: "PASSWORD": 無効な識別子です。
Position      : 21
Statement     : update "M_USER" set "PASSWORD" = :p0, "UPDATED_AT" = :p1 where "NAME" = :p2
Bindings      : [*****************************,2019-07-20 15:06:06,hogeuser]


원인



원인은 ver5.4까지는 쿼리를 조립할 때 예약어가 아닌 것을 판별하여 컬럼명을 대문자로 변환하고 있었지만, ver5.5 이후는 문답 무용으로 변환하게 되어 버렸기 때문인 것 같습니다. 했다.
※오류 로그에 나와 있는 대문자의 「PASSWORD」가 예약어였습니다. 실제 열 이름은 소문자로 'password'

비교






ver
git


5.4
htps : // 기주 b. 이 m/야j등/ぁらゔぇl-오시 8/bぉb/5. php

5.5
htps : // 기주 b. 이 m/야j 등/ぁらゔぇl-오시 8/bぉb/5. php


대책



(1) 패키지의 오버라이드 버전을 준비



임의의 디렉토리에 패키지(yajra/laravel-oci8)를 통째로 복사해 배치

※임의 디렉토리
[프로젝트 폴더]/app/VendorOverrides/
문제의 [비교] 부분의 처리 만 다시 씁니다.
※5.4의 처리로 치환

(2) composer.json을 다음과 같이 추가합니다.



composer.json
"autoload": {
    "classmap": [
        "database/seeds",
        "database/factories"
    ],
    "psr-4": {
        "App\\": "app/"
    },
    "exclude-from-classmap": [
        "vendor\\yajra\\laravel-oci8\\src\\Oci8\\Query\\Grammars\\OracleGrammar.php"
    ],
    "files":[
        "app\\VendorOverrides\\yajra\\laravel-oci8\\src\\Oci8\\Query\\Grammars\\OracleGrammar.php"
    ]
},

(3) 명령 실행



실행 명령
composer dump-autoload

참고



Laravel How to override vendor class file?
ㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜ 메/php/ぁらゔぇlーおゔぇりーーゔぇ도 rcぁせ s. HTML

좋은 웹페이지 즐겨찾기