0

'events'라는 객체가 있는데, $ data [ 'events'] = function을 통해 생성됩니다 (이 이벤트는 활성 레코드를 사용하여 이벤트 테이블 및 기타 정보를 가져옵니다).CodeIgniter 다차원 객체 - ActiveRecord

Array 
    (
     [0] => stdClass Object 
      (
       [id] => 2 
       [course_name] => Course 3 
       [course_description] => Course 
       [course_price] => 995 
       [supplier_name] => Supplier 3 
       [location_country_code] => GB 
       [location_country] => United Kingdom 
       [location_city] => London 
       [venue_name] => Venue 2 
       [venue_address] => 2 Street 
       [venue_postcode] => EC2M 7PQ 
       [venue_city] => London 
       [venue_county] => 
       [venue_country] => United Kingdom 
       [venue_locality] => 
       [event_type] => Materials Only 
       [event_status] => Confirmed 
       [course_id] => 2 
       [event_duration] => 3 
       [event_start_date] => 2013-09-12 
       [event_date_added] => 2013-02-26 14:36:06 
       [event_status_id] => 2 
       [event_type_id] => 4 
       [tutor_id] => 0 
       [tutor_confirmed] => 0 
       [event_featured] => 0 
       [event_push] => 0 
       [event_active] => 0 
       [invigilator_id] => 0 
       [event_discount] => 
       [event_max_delegates] => 16 
       [location_id] => 1 
       [venue_id] => 1 
       [supplier_id] => 2 
      ) 

     [1] => stdClass Object 
      (
       [id] => 1 
       [course_name] => Course Name 
       [course_description] => Course Description 
       [course_price] => 995 
       [supplier_name] => Supplier 1 
       [location_country_code] => GB 
       [location_country] => United Kingdom 
       [location_city] => London 
       [venue_name] => Venue Name 
       [venue_address] => Street 
       [venue_postcode] => EC2M 7PQ 
       [venue_city] => London 
       [venue_county] => 
       [venue_country] => United Kingdom 
       [venue_locality] => 
       [event_type] => Private Venue 
       [event_status] => Provisional 
       [course_id] => 1 
       [event_duration] => 3 
       [event_start_date] => 2013-11-13 
       [event_date_added] => 2013-02-26 09:56:17 
       [event_status_id] => 1 
       [event_type_id] => 3 
       [tutor_id] => 0 
       [tutor_confirmed] => 0 
       [event_featured] => 0 
       [event_push] => 0 
       [event_active] => 0 
       [invigilator_id] => 0 
       [event_discount] => 395 
       [event_max_delegates] => 16 
       [location_id] => 1 
       [venue_id] => 1 
       [supplier_id] => 1 
      ) 

    ) 

내가 다리를 사용하여 이벤트에 부착 된 대표를 끌어 그, 액티브를 사용하여 각 행의 키 '대표'에 중첩 된 개체를 추가하고 싶습니다 : 이벤트 객체

처럼 보이는 해당 테이블의 'event_id'및 'delegate_id'열을 비교하여 'events_delegates_bridge'테이블을 만듭니다.

Array 
    (
     [0] => stdClass Object 
      (
       [id] => 2 
       [course_name] => Course 3 
         [delegates] => Array 
              (
               [0] => stdClass Object 
                (
                 [id] => 1 
                 [name] => Joe Bloggs 
                ) 
               [1] => stdClass Object 
                (
                 [id] => 2 
                 [name] => Joe Smith 
                ) 
               [3] => stdClass Object 
                (
                 [id] => 3 
                 [name] => Jane Doe 
                ) 
              ) 
       [course_description] => Course 
       [course_price] => 995 
       [supplier_name] => Supplier 3 
       [location_country_code] => GB 
       [location_country] => United Kingdom 
       [location_city] => London 
       [venue_name] => Venue 2 
       [venue_address] => 2 Street 
       [venue_postcode] => EC2M 7PQ 
       [venue_city] => London 
       [venue_county] => 
       [venue_country] => United Kingdom 
       [venue_locality] => 
       [event_type] => Materials Only 
       [event_status] => Confirmed 
       [course_id] => 2 
       [event_duration] => 3 
       [event_start_date] => 2013-09-12 
       [event_date_added] => 2013-02-26 14:36:06 
       [event_status_id] => 2 
       [event_type_id] => 4 
       [tutor_id] => 0 
       [tutor_confirmed] => 0 
       [event_featured] => 0 
       [event_push] => 0 
       [event_active] => 0 
       [invigilator_id] => 0 
       [event_discount] => 
       [event_max_delegates] => 16 
       [location_id] => 1 
       [venue_id] => 1 
       [supplier_id] => 2 
      ) 
       ) 

모든 아이디어가 최선의 방법이를 달성하기 : 있도록 는 기본적으로 개체가 너무처럼 보인다? 감사.

이벤트 모델 클래스 Event_Model는 CI_Model {

public function get_events() { 

     $this->db->select('*'); 
     $this->db->from('courses'); 
     $this->db->from('suppliers'); 
     $this->db->from('locations'); 
     $this->db->from('venues'); 
     $this->db->from('event_type'); 
     $this->db->from('event_status'); 
     $this->db->join('events', 'events.course_id = courses.id AND events.supplier_id = suppliers.id AND events.location_id = locations.id AND events.venue_id = venues.id AND events.event_type_id = event_type.id AND events.event_status_id = event_status.id', 'inner'); 
     $this->db->order_by('events.event_start_date', 'asc'); 
     $query = $this->db->get(); 

     return $query->result(); 

    } 

} 

대시 컨트롤러 $ 데이터 [ '이벤트'] = $ this-> event_model-> get_events()을 확장;

대리모 모델 위임 데이터를 가져 오기 위해 생성했습니다. 이벤트 객체에 올바른 델리게이트를 추가하는 데 사용할 수 있다고 생각합니까?

class Delegate_Model extends CI_Model { 

    public function get_delegates() { 

     $this->db->select('*'); 
     $this->db->from('delegates'); 
     $this->db->from('events_delegates_bridge'); 
     $this->join('delegates', 'delegates.id = events_delegates_bridge.delegate_id', 'inner'); 
     $query = $this->db->get(); 
     return $query->result(); 

    } 

} 

그냥 테스트하여 빈 페이지를 표시합니다.

답변

1

당신은 2 개 개의 별도 쿼리 그 일을 가장 좋은 선택이야을 생각합니다.

$events = array(); 
$result = $this->db->query('SELECT * FROM events WHERE ...'); 
foreach($result->result_array() as $event) { 
    $events[$event['id']] = $event; 
} 

$result = $this->db->query(' 
    SELECT * FROM events_delegates_bridge 
    JOIN delegates ON (delegate_id = delegates.id) 
    WHERE ... 
'); 
foreach($result->result_array() as $delegate) { 
    if (!empty($events[$delegate['event_id']])) { 
     $events[$delegate['event_id']]['delegates'][] = $delegate 
    } 
} 

코드의이 비트는 이벤트를 조회하고 이벤트 ID로 인덱스 배열을 넣습니다. 그런 다음 대리인을 끌어 와서 별도의 쿼리를 실행하고 해당 이벤트에 첨부합니다.

+0

그래도 활성 레코드를 사용하고 싶습니까? –

+0

원하는 경우'-> query()'비트를 해당 활성 레코드로 대체 할 수 있습니다. –

+0

이벤트 모델과 $ 데이터 객체를 대시 보드 컨트롤러에 추가하여 질문을 편집 했으므로 이벤트를 어떻게 처리하는지 확인할 수 있습니다. 내가 설명했던 것을 어떻게 통합 할 것인가? 나는 CodeIgniter를 처음 사용했다. –

-1

사용 $name=$variable->result_array();var_dump($name); 나는이 작품

+0

이 솔루션의 문제점은 무엇입니까 .. 잘못입니까? – Akash

+0

나는 투표하지 않았다. –

+0

가 그것이 문제를 해결할 수 있습니까? – Akash