itsource

mariabd의 longtext의 JSON이 "데이터베이스 값을 원칙 유형 json으로 변환할 수 없습니다"를 반환합니다.

mycopycode 2022. 10. 25. 21:30
반응형

mariabd의 longtext의 JSON이 "데이터베이스 값을 원칙 유형 json으로 변환할 수 없습니다"를 반환합니다.

Symfony 5, 나는 나의 글을 쓴다.User엔티티 코드:
https://symfony.com/doc/current/security.html#denying-access-roles-and-other-authorization

그리고 나는 mariadb를 사용한다.

public function getRoles(): array
    {
        $roles[] = $this->roles;
        // guarantee every user at least has ROLE_USER
        $roles[] = 'ROLE_USER';

        return array_unique($roles);
    }

그리고 역할을 가진 사용자를 수동으로 추가했습니다.ROLE_ADMIN.

에러를 반환하는 이유를 이해할 수 없습니다.

데이터베이스 값 "ROLE_ADMIN"을 교리 유형 json으로 변환할 수 없습니다.

에러는, 무효인 JSON 의 값을 설정하고 있기 때문에 발생합니다.DB를 직접 수정하려면 JSON 유형에 유효한 값을 입력해야 합니다.이 경우 다음과 같습니다.

["ROLE_ADMIN"]

다음 대신:

ROLE_ADMIN

또한 잘못된 열 유형을 선택했습니다.하는 동안에JSON의 에일리어스입니다.LONGTEXTMariaDb,JSON입력된 열. 구속조건이 추가됩니다.링크한 문서에서 설명한 대로:

유효한 json 문서가 삽입되도록 하기 위해 JSON_VALID 함수를 CHECK 제약으로 사용할 수 있습니다.이 제약조건은 MariaDB 10.4.3에서 JSON 에일리어스를 사용하는 유형에 대해 자동으로 포함됩니다.

이렇게 하면 수동으로 입력한 데이터가 유효한 JSON 문서가 아님을 알 수 있습니다.

기본값을 변경할 필요가 전혀 없습니다.getRoles()메서드를 지정합니다.이 에러에 나타나 있듯이, 속성에 JSON 타입을 사용하고 있는 경우는, 이 타입은 정상적으로 동작합니다.

제가 쓴 것처럼 마리아DB를 씁니다.MariaDB 도움말은 https://mariadb.com/kb/en/json-data-type/를 참조하십시오.

따라서 엔티티(src/Entity/User.php)로 치환하려고 합니다.

public function getRoles(): array
    {
        $roles[] = json_encode($this->roles);
        …

단, @yivi가 쓴 것처럼 잘못된 방법입니다.첫 번째 오류는 db의 값입니다.저처럼 데이터베이스 내의 사용자를 수동으로 정의하는 경우에도 주의해 주세요.예를 들어 예를 들어 다음과 같이 입력합니다.["ROLE_ADMIN"]안 되는 것ROLE_ADMIN다른 오류가 반환될 수 있습니다.Notice: Array to string conversion두 번째 오류가 발생했기 때문입니다.

$roles[] = $this->roles;
//instead of
$roles = $this->roles;

바보 같은 입력 오류

언급URL : https://stackoverflow.com/questions/67573037/json-in-longtext-in-mariabd-returns-could-not-convert-database-value-to-doctrin

반응형