【问题标题】:CodeIgniter Multidimensional Object - ActiveRecordCodeIgniter 多维对象 - ActiveRecord
【发布时间】:2013-02-27 15:32:13
【问题描述】:

我有一个名为“events”的对象,它是通过 $data['events'] = function 创建的(该函数使用活动记录从事件表和其他表中提取信息)。

事件对象如下所示:

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
            )

    )

我想使用 ActiveRecord 在每行的键“委托”下添加一个嵌套对象,通过比较“事件 ID”和“委托 ID”列,使用桥接表“事件_委托_桥”拉出附加到事件的委托在那张桌子上。 本质上是为了让对象看起来像这样:

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();

    }

}

仪表板控制器 $data['events'] = $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();

    }

}

刚刚测试过,它显示一个空白页。

【问题讨论】:

    标签: codeigniter activerecord multidimensional-array codeigniter-2


    【解决方案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 索引的数组中。 然后,运行一个单独的查询来提取委托,并将它们附加到适当的事件。

    【讨论】:

    • 我想使用活动记录吗?
    • 如果需要,您可以将->query() 位替换为其活动记录等效项。
    • 我已经编辑了我的问题,在仪表板控制器中添加了事件模型和 $data 对象,这样您就可以看到我是如何处理事件的。我将如何整合您所解释的内容?我对 CodeIgniter 很陌生。
    【解决方案2】:

    使用$name=$variable->result_array();var_dump($name);我认为这个工作

    【讨论】:

    • 这不是真正的解决方案,它没有向我解释什么?
    • 好的,在你的模型中改变这个 -- return $query->result();返回 $query->result_array();它以数组()的形式返回 $query 数据。
    • 我正在尝试将另一个对象添加到事件对象中的“委托”键中,该键将包含与该事件关联的所有委托。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 2015-12-30
    • 1970-01-01
    相关资源
    最近更新 更多