Codeigniter, передающий данные из модели в контроллер

#php #codeigniter

#php #codeigniter

Вопрос:

Я новичок в CodeIgniter.Может ли кто-нибудь, пожалуйста, помочь мне, рассказав, как передать $row['main_products_cat_id']; модель 'id'=> 'my id here', в контроллер. Я перепробовал так много способов, но потерпел неудачу.

Спасибо!!!

Это моя модель

 function cart_product_records($id){

        $this->db->from('tbl_sub_products');
        $this->db->where('tbl_sub_products.sub_product_id', $id);
        $query = $this->db->get();

        foreach ($query->result_array() as $row){

            echo $row['main_products_cat_id'];
            echo $row['sub_product_id'];
            echo $row['sub_product_name'];
            echo $row['sub_product_description'];
            echo $row['sub_product_image'];
            echo $row['sub_product_price'];    
        }
        return $query->result();    
}
 

это мой контроллер

 function shopping_cart(){  

        $id = $this->input->get('id');    
        if($query =   $this->mod_products->cart_product_records($id)){

            $data['result'] = array(

                       'id'      => 'my id here',
                       'qty'     => my qty here,
                       'price'   => my price here,
                       'name'    => 'my product name here'

                    );
        }

 }
 

Ответ №1:

Во-первых, вы не должны echo использовать данные в своей модели — вам действительно нужны только echo данные в вашем файле представления.

Способ передачи ваших данных заключается в том, что сначала вы переходите $id от своего контроллера к своей cart_product_records функции в mod_products модели. Затем модель выполняет запрос и получает данные из вашей базы данных. Эти данные представлены $query->result_array() or $query->result() (вы используете оба из них, но вы должны использовать только один раз).

Итак, у вас есть return $query->result() which отправляет ваши данные обратно на ваш контроллер. Данные будут сохранены в $query переменной, потому что у вас есть $query = $this->mod_products->cart_product_records($id) .

На вашем месте я бы добавил !empty() проверку в оператор if, чтобы это выглядело так:

 if( !empty($query =   $this->mod_products->cart_product_records($id)) ){
 

Затем, в зависимости от того, какие данные вы хотите получить $query , вы либо захотите создать цикл (который позволит вам извлекать несколько идентификаторов, цен и т. Д.), Либо вы можете извлекать определенные значения $query , например $query[0][main_products_cat_id] (предполагается $query , что это массив) или $query[0]->main_products_cat_id (если это объект).

Надеюсь, это поможет!

Ответ №2:

Ваш запрос $ содержит объект результатов базы данных. Итак, вы сделаете это в своем массиве $data в вашем контроллере.

 $data['result'] = array(
    'id' => $query->main_products_cat_id,
    // carry on...
);
 

Комментарии:

1. Я думаю, что это было бы $query[0]->main_products_cat_id

2. Вы правы. Я бы вернул $query[0] из модели.

Ответ №3:

Я не вижу смысла писать

 echo $row['main_products_cat_id'];
....
 

В вашем цикле создайте массив как

 foreach ($query->result_array() as $row){

           $return_array[] = $row;
        }
        return $return_array
 

и в контроллере вы можете получить доступ как

 $query['your_id'];