2011-04-27 3 views
2

모든 관계가있는 객체를 어떻게 반환 할 수 있습니까 (하위 객체 관계입니까?). 이제 EJsonBehavior를 사용하지만 하위 관련 객체가 아닌 첫 번째 레벨 관계 만 반환합니다. 내 소스 코드 :관계가있는 Yii JSON

$order = Order::model()->findByPk($_GET['id']); 
    echo $order->toJSON(); 
    Yii::app()->end(); 

답변

3

열망 로딩 방식 함께 주요 AR 예 (들)과 관련 AR 인스턴스를 검색합니다. 이것은 AR에서 find 또는 findAll 메소드 중 하나와 함께 with() 메소드를 사용하여 수행됩니다. 예 :

$posts=Post::model()->with('author')->findAll(); 

위의 코드는 Post 인스턴스의 배열을 반환합니다. 게으른 접근 방식과 달리 속성에 액세스하기 전에 각 Post 인스턴스의 작성자 속성은 이미 관련 User 인스턴스로 채워져 있습니다. 열심히로드하는 접근 방식은 각 게시물에 대한 조인 쿼리를 실행하는 대신 모든 조인을 작성자와 함께 단일 조인 쿼리로 가져옵니다!

with() 메소드에서 여러 개의 관계 이름을 지정할 수 있으며 열렬한로드 방식을 통해 모든 것을 한 번에 다시 가져올 수 있습니다. 예를 들어, 다음 코드는 작성자 및 카테고리와 함께 게시물을 가져올 것입니다.

$posts=Post::model()->with('author','categories')->findAll(); 

중첩 된 열의로드를 수행 할 수도 있습니다. 대신 관계 이름 목록, 우리는

$posts=Post::model()->with(
    'author.profile', 
    'author.posts', 
    'categories')->findAll(); 

위의 예들은 저자 및 카테고리와 함께 다시 모든 게시물을 가져올 것이다, 다음처럼() 메서드에 관계 이름의 계층 적 표현으로 전달합니다. 또한 각 저자의 프로필과 게시물을 가져올 것입니다.

열망로드는 또한 다음과 같은 특성을 가진 CDbCriteria을 :: 지정하여 실행 할 수 있습니다

$criteria=new CDbCriteria; 
$criteria->with=array(
    'author.profile', 
    'author.posts', 
    'categories', 
); 
$posts=Post::model()->findAll($criteria); 

또는

$posts=Post::model()->findAll(array(
    'with'=>array(
     'author.profile', 
     'author.posts', 
     'categories', 
    ) 
); 
+0

감사합니다. 내일 사용해 보겠습니다. –

3

은 그에 대한 해결책을 발견했다. $ row-> attributes를 사용하여 데이터를 만들 수 있습니다.

$magazines = Magazines::model()->with('articles')->findAll(); 


    $arr = array(); 
    $i = 0; 
    foreach($magazines as $mag) 
    { 
     $arr[$i] = $mag->attributes; 
     $arr[$i]['articles']=array(); 
     $j=0; 
     foreach($mag->articles as $article){ 
      $arr[$i]['articles'][$j]=$article->attributes; 
      $j++; 
     } 
     $i++; 
    } 
    print CJSON::encode(array(
      'code' => 1001, 
      'magazines' => $arr, 
     ));