2009-12-19 4 views
11

Doctrine 1.2를 사용하고 있는데, 어떻게 객체를 json/array 형식으로 가져올 수 있습니까?Doctrine 객체를 json으로 변환하는 방법

$user = Doctrine_Query::create() 
->select('u.id, u.username, u.firstname, u.lastname') 
->from('User u') 
->orderby('u.id') 
->execute(); 
+0

두 번째 응답은 매우 좋습니다. [http : // stackoverflow.COM/질문/6706485/방법 - 투 - 인코딩 - 교리 - 단체 - 투 - JSON -에 - 심포니 - 2-0 - 아약스 - 응용 프로그램] [1] [1] : HTTP : // 유래 .com/questions/6706485/how-to-encode-doctrine-entities-to-json-in-symfony-2-0-ajax-application – csadan

답변

27

해결책은 JSON 문자열이 PHP 배열을 변환 json_encode를 사용하고, 관심 데이터 만의 개봉을 포함하는 간단한 배열을 가지고는 $user 개체에 toArray() 방법을 사용하고있을 수 있습니다.

이런 식으로 뭔가, 나는 가정 :

$user = Doctrine_Query::create() 
->select('u.id, u.username, u.firstname, u.lastname') 
->from('User u') 
->orderby('u.id') 
->execute(); 

$userArray = $user->toArray(); 
$json = json_encode($userArray); 

이 (테스트하지,하지만 너무 멀리 작동해서는 안됩니다 ...)

+1

이것이 내가하는 방법이다. – Sam

+1

이 답변은 받아 들여진 것으로 표시되어야합니다 !!! – hossaindoula

+4

이 관계를 처리합니까? –

1
$users2 = Doctrine_Query::create() 
->select('u.id, u.username, u.firstname, u.lastname') 
->from('User u') 
->orderby('u.id'); 
$tmp2 = $users2->fetchArray(); 

나는 이유를 알고하지 않습니다 toArray()은 테이블의 다른 필드 인 을 제공합니다. 그것은 "암호"필드를 가지고 fetchArray() 내가 올바른 필드를 쿼리에서 제공 할 수 있습니다.

toArray()

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [username] => user1 
      [password] => password 
      [firstname] => John 
      [lastname] => Smith 
     ) 

fetchArray() JSON에 대한

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [username] => user1 
      [firstname] => John 
      [lastname] => Smith 
     ) 
+0

toArray는 객체를 배열 형식으로 직접 변환하는 것입니다. fetchArray는 실제로 변환이 아니라 더 많은 추출이라는 점에서 좀 더 영리합니다. – Oddman

1

:

$user->exportTo('json'); 

;-)

6

$ 기록 -> exportTo와 문제 ('json')모두 레코드 필드를 내보낼 것입니다. 대부분의 경우 바람직하지 않은 동작입니다 (예 :이 json 조각을 브라우저에 전달해야하는 경우).

$user = Doctrine_Query::create() 
      ->select('u.id, u.name') 
      ->from('User u') 
      ->addWhere('u.id = ?', $id) 
      ->fetchOne(); 

$user_json = $user->exportTo('json'); 

$의 user_json 사항은 다음과 같이해야합니다 : 수출의 범위를 제한하는 한 가지 방법은 DQL의 필드를 선택 지정하는 것입니다

{ 
    "id": 123, 
    "name": "John Smith", 
    "password": null, 
    "deleted": null 
} 

그래서이 노출하지 않습니다 "암호"필드 값을하지만, 에서 기본 데이터베이스 구조를 노출합니다. 다시 말하지만, 우리가 원하는 것이 아닐 수도 있습니다.

$user = Doctrine_Query::create() 
      ->select('u.id, u.name') 
      ->from('User u') 
      ->addWhere('u.id = ?', $id) 
      ->fetchOne(array(), Doctrine::HYDRATE_ARRAY); 

$user_json = json_encode($user); 

을이 경우 JSON에서 같은 모양을 :

{ 
    "id": 123, 
    "name": "John Smith" 
} 
0

이제 Doctrine ORM Transformations가 발생한 경우, 그것은 할 수 있습니다 은 내가하는 일은 배열 한 후 JSON 인코딩으로 가져 오기 + 선택 DQL 필드를 지정할 수있다 엔티티를 스칼라 배열로 변환하고 뒤로

class User implements ITransformable { 
    use Transformable; 
// ... 
echo json_encode($user->toArray()); 
+0

답변으로 연결되는 링크! –