2013-08-07 3 views
2

Я использую $ this-> find ('threaded') в моем приложении CakePHP и пытаюсь вытащить связанную модель в пределах поиска (HABTM). Я пробовал несколько методов, таких как «присоединяется», «рекурсивный» и «содержит» все без везения. Я использую CakePHP 2.3.6CakePHP Threaded «Найти» с ассоциированными моделями

Вот мой (рабочий) код.

 
class EventsController extends AppController { 

    public function promoters($id = null) { 

    $options = array('conditions' => array('Event.id' => $id)); 
    $event = $this->Event->find('first', $options); 
    $this->set('event', $event); 

    $this->loadModel('EventsPromoter'); 
    $treelistConditions = array(
      'conditions' => array(
       'event_id' => $id 
      ), 
    ); 
    $promoterTree = $this->EventsPromoter->find('threaded', $treelistConditions); 
    $this->set('promoters', $promoterTree); 

    } 

} 

Это приводит к следующему выходу массива

 

    Array 
    (
     [0] => Array 
      (
       [EventsPromoter] => Array 
        (
         [id] => 1 
         [promoter_id] => 1 
         [event_id] => 1 
         [parent_id] => 
         [created] => 2013-07-26 00:30:09 
         [modified] => 2013-07-26 00:30:09 
        ) 

       [children] => Array 
        (
         [0] => Array 
          (
           [EventsPromoter] => Array 
            (
             [id] => 10 
             [promoter_id] => 4 
             [event_id] => 1 
             [parent_id] => 1 
             [created] => 0000-00-00 00:00:00 
             [modified] => 0000-00-00 00:00:00 
            ) 

           [children] => Array 
            (
            ) 

          ) 

         [1] => Array 
          (
           [EventsPromoter] => Array 
            (
             [id] => 13 
             [promoter_id] => 6 
             [event_id] => 1 
             [parent_id] => 1 
             [created] => 0000-00-00 00:00:00 
             [modified] => 0000-00-00 00:00:00 
            ) 

           [children] => Array 
            (
            ) 

          ) 

        ) 

      ) 

     [1] => Array 
      (
       [EventsPromoter] => Array 
        (
         [id] => 2 
         [promoter_id] => 2 
         [event_id] => 1 
         [parent_id] => 
         [created] => 2013-07-26 00:30:09 
         [modified] => 2013-07-26 00:30:09 
        ) 

       [children] => Array 
        (
         [0] => Array 
          (
           [EventsPromoter] => Array 
            (
             [id] => 11 
             [promoter_id] => 5 
             [event_id] => 1 
             [parent_id] => 2 
             [created] => 0000-00-00 00:00:00 
             [modified] => 0000-00-00 00:00:00 
            ) 

           [children] => Array 
            (
             [0] => Array 
              (
               [EventsPromoter] => Array 
                (
                 [id] => 6 
                 [promoter_id] => 3 
                 [event_id] => 1 
                 [parent_id] => 11 
                 [created] => 0000-00-00 00:00:00 
                 [modified] => 0000-00-00 00:00:00 
                ) 

               [children] => Array 
                (
                ) 

              ) 

            ) 

          ) 

         [1] => Array 
          (
           [EventsPromoter] => Array 
            (
             [id] => 14 
             [promoter_id] => 7 
             [event_id] => 1 
             [parent_id] => 2 
             [created] => 2013-07-26 00:30:09 
             [modified] => 2013-07-26 00:30:09 
            ) 

           [children] => Array 
            (
            ) 

          ) 

        ) 

      ) 

    ) 

Что я хочу, чтобы мой код на выход не является следующим

 

    Array 
    (
     [0] => Array 
      (
       [EventsPromoter] => Array 
        (
         [id] => 1 
         [promoter_id] => 1 
         [event_id] => 1 
         [parent_id] => 
         [created] => 2013-07-26 00:30:09 
         [modified] => 2013-07-26 00:30:09 
        ) 

       [Promoter] => Array 
        (
         [promoter_id] => 1 
         [first_name] => 'Bob' 
         [last_name] => 'Smith' 
        ) 

       [children] => Array 
        (
         [0] => Array 
          (
           [EventsPromoter] => Array 
            (
             [id] => 10 
             [promoter_id] => 4 
             [event_id] => 1 
             [parent_id] => 1 
             [created] => 0000-00-00 00:00:00 
             [modified] => 0000-00-00 00:00:00 
            ) 
           [Promoter] => Array 
            (
             [promoter_id] => 4 
             [first_name] => 'Sally' 
             [last_name] => 'Sue' 
            ) 

           [children] => Array 
            (
            ) 

          ) 

         [1] => Array 
          (
           [EventsPromoter] => Array 
            (
             [id] => 13 
             [promoter_id] => 6 
             [event_id] => 1 
             [parent_id] => 1 
             [created] => 0000-00-00 00:00:00 
             [modified] => 0000-00-00 00:00:00 
            ) 

           [Promoter] => Array 
            (
             [promoter_id] => 6 
             [first_name] => 'Ben' 
             [last_name] => 'King' 
            ) 

           [children] => Array 
            (
            ) 

          ) 

        ) 

      ) 

     [1] => Array 
      (
       [EventsPromoter] => Array 
        (
         [id] => 2 
         [promoter_id] => 2 
         [event_id] => 1 
         [parent_id] => 
         [created] => 2013-07-26 00:30:09 
         [modified] => 2013-07-26 00:30:09 
        ) 

       [Promoter] => Array 
        (
         [promoter_id] => 2 
         [first_name] => 'Jack' 
         [last_name] => 'Sparrow' 
        ) 

       [children] => Array 
        (
         [0] => Array 
          (
           [EventsPromoter] => Array 
            (
             [id] => 11 
             [promoter_id] => 5 
             [event_id] => 1 
             [parent_id] => 2 
             [created] => 0000-00-00 00:00:00 
             [modified] => 0000-00-00 00:00:00 
            ) 

           [Promoter] => Array 
            (
             [promoter_id] => 5 
             [first_name] => 'Jane' 
             [last_name] => 'Doe' 
            ) 

           [children] => Array 
            (
             [0] => Array 


             (
              [EventsPromoter] => Array 
               (
                [id] => 6 
                [promoter_id] => 3 
                [event_id] => 1 
                [parent_id] => 11 
                [created] => 0000-00-00 00:00:00 
                [modified] => 0000-00-00 00:00:00 
               ) 

              [Promoter] => Array 
               (
                [promoter_id] => 3 
                [first_name] => 'Mike' 
                [last_name] => 'Jones' 
               ) 

              [children] => Array 
               (
               ) 

             ) 

           ) 

         ) 

        [1] => Array 
         (
          [EventsPromoter] => Array 
           (
            [id] => 14 
            [promoter_id] => 7 
            [event_id] => 1 
            [parent_id] => 2 
            [created] => 2013-07-26 00:30:09 
            [modified] => 2013-07-26 00:30:09 
           ) 

          [Promoter] => Array 
           (
            [promoter_id] => 7 
            [first_name] => 'Spider' 
            [last_name] => 'Man' 
           ) 

          [children] => Array 
           (
           ) 

         ) 

       ) 

     ) 

) 

Я ничего не пытался работаю, и это, кажется, как то, что Торт должен быть в состоянии справиться довольно легко. Заранее благодарю за любую помощь!

+0

Вы попробовали '' содержать '=> массив (' Promoter ') '(обратите внимание на отсутствующие s - не содержит)? Также: вы должны всегда указывать точную версию cakephp, которую вы используете. – mark

+0

Да, я пробовал также, вот что этот код выглядел как: $ treelistConditions = массив ( \t \t 'условия' => массив ( \t \t \t 'event_id' => $ ID \t \t), \t \t 'содержать' => массив ('Promoter'), ); Кроме того, я обновил вопрос с помощью правильной версии CakePHP –

ответ

1

Я принимал несколько неправильный подход к тому, что я пытался выполнить. Хотя я все еще думаю, что это должно быть возможно из моего класса EventsController, я решил сделать его в классе HABTM EventsPromotersController. Код намного проще с использованием этого метода

 

    class EventsPromotersController extends AppController { 

     public function event($event_id = null) { 
       $options = array('conditions' => array('event_id' => $event_id)); 
       $promoters = $this->EventsPromoter->find('threaded', $options); 
       $this->set('promoters', $promoters); 
     } 

    } 

Смежные вопросы