교리 배열 대 simple_array 대 json_array
심포니와 교리를 ORM으로 사용합니다. 사용 가능한 유형에는 array , simple_array 또는 json_array 가 있습니다. 각각의 차이점은 무엇입니까? 그리고 둘 중 하나를 언제 사용합니까? 차이점을 설명하기 위해 각각에 대한 쇼케이스가 있습니까?
이미 일부 응용 프로그램에서 simple_array를 사용했지만 formType에서 제대로 렌더링되지 않는 것으로 나타났습니다 ... (아니면 잘 사용하지 않을 수도 있습니다!?)
내 질문을 설명하기 위해 다음은 쇼 케이스입니다.
특정 요일에 실행해야하는 작업이 있으므로 days 속성으로 TaskEntity 를 만들었습니다.
날짜는 다음과 같습니다.
$days = array(
1=>true,
2=>true,
3=>true,
4=>true,
5=>true,
6=>false,
7=>false
);
그러나 나는 마녀 유형을 선택할지 모른다 ...
문제 simple_array
가 올바른 방법이기 때문에 올바른 방법으로 7 개의 부울 필드를 만들 수도 있습니다.
그러나 여기에 약간의 vademecum이 있습니다.
유형이 교리에서 어떻게 작동하는지 확인하는 가장 좋은 방법은 유형의 코드를 읽는 것입니다. 이는 당연한 것으로 간주되거나 문서에 실제로 설명되지 않은 몇 가지 세부 사항이 있기 때문입니다.
그래서 당신은 들어갈 수 있습니다
/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/Type.php
유형을 찾고 방법이 원하는대로 작동하는지 확인하십시오.
여기에 몇 가지 세부 사항이 있습니다.
단순 배열
에 /vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/SimpleArrayType.php
return implode(',', $value);
그것은 단지 implode()
/ explode()
의 항목이고 값만 저장하며 데이터베이스를 쉽게 쿼리 할 수 있기 때문에 유용합니다.
정렬
에 /vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/ArrayType.php
return serialize($value);
PHP를 serialize()
/로 호출 unserialize()
하면 json_array
. 코드를 보면 객체에서도 작동한다고 생각합니다. 필드가 일반 텍스트로 표시되면 이해할 수없는 것입니다.
json_array
에 /vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/JsonArrayType.php
return json_encode($value);
json_encode()
/를 호출 json_decode()
합니다. 필드를 보면 형식화되지 않은 JSON 배열을 볼 수 있지만 PHP의 직렬화 된 객체보다 더 읽기 쉽고 이식성이 훨씬 뛰어납니다 (JSON은 어디에나 존재합니다).
2018 년 6 월 업데이트
- 이제 여기에 완전하고 업데이트 된 문서가 있습니다.
- json_array는 json 유형을 위해 더 이상 사용되지 않으며 json 필드에 대한 새로운 데이터베이스 기능을 활용합니다.
또 다른 고려 사항 : 여기에 제시된 것과 같은 참 / 거짓 값의 작은 집합을 나타내는 가장 효율적인 방법은 bitfield 입니다.
그런 식으로 전체 문자열 대신 하나의 정수만 저장합니다. 그리고 인코딩 / 디코딩 오버 헤드를 피할 수 있습니다.
좋은 예는 https://stackoverflow.com/a/5412214/827254 를 참조 하십시오 .
당신의 문제에 대한 가장 좋은 방법은, 언급 한 바와 같이, 유형의 배열 매핑 사용하는 것 array
또는 json_array
하지만 하지 simple_array
. 그 이유는의 직렬화 방법이 simple_array
호출 일 implode(',', $array)
뿐이며 배열의 키가 아닌 값만 유지하므로 연관 배열이있는 상황에서는 유효하지 않기 때문입니다.
그러나 $days
속성을 0 기반 배열로 모델링 할 수도 있습니다 (예 : 월요일은 0, 화요일은 1 등). 이 경우 역 직렬화가 explode(',', $serialized);
직렬화 된 값으로 0 기반 배열을 생성 하기 때문에 작동 합니다.
문서에 따르면 :
어레이 데이터를 재지 정하는 3 가지 선택 사항이 있습니다.
array
Type that maps a SQL CLOB to a PHP array usingserialize()
andunserialize()
.simple_array
Type that maps a SQL CLOB to a PHP array usingimplode()
andexplode()
, with a comma as delimiter.IMPORTANT: Only use this type if you are sure that your values cannot contain a
,
.json_array
Type that maps a SQL CLOB to a PHP array usingjson_encode()
andjson_decode()
.
So, if you are sure about not having ,
(comma) in your array values, use simple_array
. If you have a simple array structure (linear), use array
and if you have more complex key-value arrays, use json_array
.
ReferenceURL : https://stackoverflow.com/questions/16587769/doctrine-array-vs-simple-array-vs-json-array
'programing' 카테고리의 다른 글
해당 div로 스크롤 한 후 div를 수정하는 방법은 무엇입니까? (0) | 2021.01.18 |
---|---|
ScrollViewer 마우스 휠이 작동하지 않습니다. (0) | 2021.01.18 |
변수가 여러 문자열 값과 같지 않은지 확인하는 더 간단한 방법은 무엇입니까? (0) | 2021.01.18 |
matplotlib (python)에서 글꼴을 변경하는 방법은 무엇입니까? (0) | 2021.01.18 |
구조체에서 벡터 벡터를 초기화하는 방법은 무엇입니까? (0) | 2021.01.18 |