2017-12-20 27 views
-1

법인을 인코딩 할 때 후행 슬래시 이유 :JSON 배열 -

//... 
/** 
* @ORM\Column(type="json_array", nullable=true) 
*/ 
protected $params = null; 

function setParams($params) 
{ 
    $this->params = $params; //json_encode($params); 
} 

및 양식 유형 :

//... 
     ->add('params', null, array(
      'required' => false, 
     )) 

그래서, 아무것도 이상한. 위의 코드는 올바르게 작동합니다. 하지만 setParams 메서드의 줄을 "json_encode ($ params);"로 변경하면 (오른쪽에있는 PHP 주석을 참고하십시오), DB에 슬래시가 생깁니다 (var를 덤프하면 DB에 저장하기 전에 괜찮아 보입니다). 그리고 그것은 DB에서만 잘못된 것이며 인코딩 할 때만입니다. 흥미롭게도, 배열을 setParams에 직접 전달하는 것만으로도 충분합니다. Doctrine은 올바르게 저장합니다 ...

누군가가 왜 그 이유를 설명 할 수 있습니까?

+0

"나쁜"데이터를 설명하는 대신 대신 예제를 복사/붙여 넣기하는 방법은 무엇입니까? – Sammitch

+0

@Sammitch 문제와 직접적으로 관련된 코드 만 넣으면 그 요점이 희미 해집니다. – forsberg

+0

@Sammitch에 동의합니다. 데이터베이스에서 이러한 후행 슬래시의 예를보고 싶습니다. 열 유형을'json_array'로 정의 했으므로, 데이터를 직접 json_encode() 할 때 이중 인코딩이 발생한다고 생각합니다. 그러나이를 확인하기 위해서는 잘못된 데이터의 예를 찾아야합니다. – rickdenhaan

답변

1

json_array 지금 JSON (감사 스테판 Vierkant)

는 직렬화 된 JSON으로 데이터베이스에 PHP 배열/객체를 저장하기위한 교리 유형입니다.

매개 변수를 json이 아닌 배열로 설정해야하며 getter에서 setParams 또는 json_decode 내에 json_encode ($ params)를 호출하지 않아야합니다. 교리는 당신을 위해 모든 더러운 일을 할 것입니다.

function setParams(array $params) 
{ 
    $this->params = $params; 
} 

왜 엔티티의 배열로 사용하고 데이터베이스에 직렬화할까요?

  1. 그것은 빠르다는/JSON보다
  2. 일부 데이터베이스 엔진을 기본 PHP 배열을 조작하기 쉬운 당신이 JSON 필드 내에서 검색 할 수 있습니다
  3. 직렬화 된 PHP 나 XML보다는 당신의 DB 관리 시스템과 쉽게 편집 할 수
+1

이 유형은 2.6 이후로 사용되지 않으므로 대신'json'을 사용해야합니다. 그럼에도 불구하고 +1. –

+0

Thx for this out this. 이것을 가리키는 Thx. 그러나 최신 3.x (3.4) Symfony를 사용하고 jctn을 사용할 수없는 Doctrine dbal 2.5.13과 함께 제공됩니다. 알 수없는 열 유형 "json"이 요청되었습니다. " 다음 링크는 https://github.com/doctrine/dbal/blob/2.5/lib/Doctrine/DBAL/Types/Type.php입니다. – forsberg