문제

Magento 1 시스템이 패딩 길이를 초과하는 증분 ID를 생존 할 수 있습니까?

that eav_entity_type 테이블은 기본값 8으로 기본값 인 increment_pad_length 열이 들어 있습니다. 즉, Magento는 eav_entity_store 테이블에서 주문 (또는 따옴표, 선적 등)에 대한 증분 ID를 생성 할 때 숫자를 패드합니다.이

와 같은 것
100000012
.

는 PADDINE이 1 또는 0로 설정된 경우 MAGENTO 시스템이 정상적으로 작동합니까?그 패딩이 4와 같은 것으로 줄어들면 Magento 시스템이 정상적으로 작동 할 것입니다. 그리고 eav_entity_store의 실제 증분 ID 값은 10,000 이상입니까?

도움이 되었습니까?

해결책

Magento의 eav_entity_type 테이블의 열 길이를 초과하지 않는 한,

Magento에서 패드 설정이 사용되는 유일한 위치는 Mage_Eav_Model_Entity_Increment_Alphanum::getNextId에 있으며 마지막 ID를 사용하여 마지막으로 숫자를 증가시키는 마지막 ID를 사용합니다.

다음 ID를 계산하면 선행 접두사가 꺼지고 문자열 패드 만 남았습니다. inbuild PHP 함수를 사용하여 패드보다 긴 문자열을 무시합니다.

이 repl 출력을 참조하십시오 :

[1] boris> str_pad('9999999999',8,'0',STR_PAD_LEFT);
 → string(10) "9999999999"
[2] boris> str_pad('999999999999999999',8,'0',STR_PAD_LEFT);
 → string(18) "999999999999999999"
.

그래서 본질적으로 결과 ID 문자열을 다른 문자열 인 것처럼 대우합니다. 나중에 for 루프는 해당 문자열의 전체 길이로 순환 할만 큼 충분히 똑똑하고 크기를 쉽게 처리해야합니다.

<?php

function test($lastId){
        $nextId = '';
        $bumpNextChar = true;
        $chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $lchars = strlen($chars);
        $lid = strlen($lastId)-1;

        for ($i = $lid; $i >= 0; $i--) {
            $p = strpos($chars, $lastId{$i});
            if (false===$p) {
                throw new Exception('Invalid character found');
            }
            if ($bumpNextChar) {
                $p++;
                $bumpNextChar = false;
            }
            if ($p===$lchars) {
                $p = 0;
                $bumpNextChar = true;
            }
            $nextId = $chars{$p}.$nextId;
        }   

        var_dump($nextId);
}

test('09234029342');
// =>string(11) "09234029343"

test('22');
// =>string(2) "23"
test('23409235092835029385023958230598235');
// =>string(35) "23409235092835029385023958230598236"
.

는 PHP에서 정수가있는 일정 길이를 초과하면 예외를 트리거 할 과학 표기법으로 변환됩니다.

이들을 의도적으로 문자열로 전달했습니다.

어떤 이유로 마젠토는 이들을 보지 못했던 int로 이들을 수출했을 때 블로우를 날려 버리고 blaw, P>

test(2.3409235092835E+34)
// =>PHP Fatal error:  Uncaught exception 'Exception' with message 'Invalid character found'
.

면책 조항

1.2 CE 일에 이것에 대해 이루어 졌으므로 나와 함께 짊어지고 지식의 나이를 고려해야합니다 (그리고 내가이 가정을하는 1.14.2.2 ee 코드를 읽는 사실을 읽으십시오)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 magento.stackexchange
scroll top