2015-12-28 3 views
0

Я хотел бы создать запрос, который возвращает продукт со всеми изображениями не только с одним изображением.
Это моя модель для извлечения продуктовСоедините несколько строк одной таблицы на одной записи (Codeigniter 3)

function get_latest($id){ 
    $this->db->select('*'); 
    $this->db->from('products'); 
    $this->db->join('products_pictures', 'products_pictures.id_product = products.id_product', 'left'); 
    $this->db->join('thumbs', 'thumbs.id_thumb = products_pictures.id_thumb', 'left'); 
    $this->db->join('images', 'images.id_image = thumbs.id_image', 'left'); 
    $this->db->order_by('date_c', 'DESC'); 
    $this->db->limit($id); 
    $query = $this->db->get(); 
    return $query->result(); 
    } 

И это выход

0 => 
    object(stdClass)[35] 
     public 'id_product' => string '1000' (length=4) 
     public 'name' => string 'Graham Corners' (length=14) 
     public 'description' => string 'Et ea quaerat totam temporibus quis. Ut fugiat blanditiis vel corporis minus veniam. Consequatur corporis sint sed assumenda itaque ratione ipsum distinctio. Voluptate autem quo sunt rerum.' (length=189) 
     public 'date_c' => string '2015-12-28 03:12:59' (length=19) 
     public 'date_u' => null 
     public 'id_category' => string '7' (length=1) 
     public 'id_user' => string '173' (length=3) 
     public 'alias' => string 'graham-corners' (length=14) 
     public 'active' => string '1' (length=1) 
     public 'id_product_thumb' => string '4996' (length=4) 
     public 'id_thumb' => string '4996' (length=4) 
     public 'thumb_path' => string 'http://lorempixel.com/250/150/?22290' (length=36) 
     public 'id_image' => string '4996' (length=4) 
     public 'image_path' => string 'http://lorempixel.com/1024/768/?77489' (length=37) 
    1 => 
    object(stdClass)[36] 
     public 'id_product' => string '1000' (length=4) 
     public 'name' => string 'Graham Corners' (length=14) 
     public 'description' => string 'Et ea quaerat totam temporibus quis. Ut fugiat blanditiis vel corporis minus veniam. Consequatur corporis sint sed assumenda itaque ratione ipsum distinctio. Voluptate autem quo sunt rerum.' (length=189) 
     public 'date_c' => string '2015-12-28 03:12:59' (length=19) 
     public 'date_u' => null 
     public 'id_category' => string '7' (length=1) 
     public 'id_user' => string '173' (length=3) 
     public 'alias' => string 'graham-corners' (length=14) 
     public 'active' => string '1' (length=1) 
     public 'id_product_thumb' => string '4997' (length=4) 
     public 'id_thumb' => string '4997' (length=4) 
     public 'thumb_path' => string 'http://lorempixel.com/250/150/?87585' (length=36) 
     public 'id_image' => string '4997' (length=4) 
     public 'image_path' => string 'http://lorempixel.com/1024/768/?76756' (length=37) 

Причину я wan't, чтобы извлечь все изображения желаемого продукта мне нужно создать запрос, который будет выводить все изображения продукта в предметном продукте, хранящемся в каком-либо массиве или что-то еще
Желаемый выходной объект должен выглядеть примерно так

0 => 
    object(stdClass)[35] 
     public 'id_product' => string '1000' (length=4) 
     public 'name' => string 'Graham Corners' (length=14) 
     public 'description' => string 'Et ea quaerat totam temporibus quis. Ut fugiat blanditiis vel corporis minus veniam. Consequatur corporis sint sed assumenda itaque ratione ipsum distinctio. Voluptate autem quo sunt rerum.' (length=189) 
     public 'date_c' => string '2015-12-28 03:12:59' (length=19) 
     public 'date_u' => null 
     public 'id_category' => string '7' (length=1) 
     public 'id_user' => string '173' (length=3) 
     public 'alias' => string 'graham-corners' (length=14) 
     public 'active' => string '1' (length=1) 
     public 'images' => array (
      [0] => stdClass Object 
       public 'id_thumb' => string '4998' (length=4) 
       public 'thumb_path'=> string 'http://lorempixel.com/250/150/?87585' (length=36) 
       public 'id_image' => string '4998' (length=4) 
       public 'image_path' => string 'http://lorempixel.com/1024/768/?76756' (length=37) 
      [1] => stdClass Object 
       public 'id_thumb' => string '4997' (length=4) 
       public 'thumb_path'=> string 'http://lorempixel.com/250/150/?87585' (length=36) 
       public 'id_image' => string '4997' (length=4) 
       public 'image_path' => string 'http://lorempixel.com/1024/768/?76756' (length=37) 
       ........................ 

)

Спасибо заранее

ответ

1

Для меня, вы должны объединить только id_thumb в id_thumbs вместо всех данных изображения в images колонки. Например:

function get_latest($id) 
{ 
    $this->db->select('products.*,product_pictures.*'); 
    $this->db->select('GROUP_CONCAT(product_pictures.id_thumb) as id_thumbs',FALSE); 
    $this->db->from('products'); 
    $this->db->join('products_pictures', 'products_pictures.id_product = products.id_product', 'left'); 
    $this->db->order_by('date_c', 'DESC'); 
    $this->db->group_by('id_product'); 
    $this->db->limit($id); 
    $query = $this->db->get(); 
    return $query->result(); 
} 

А в модели сделать функцию с именем, как get_image_data_by_id_thumb, как показано ниже:

function get_image_data_by_id_thumb($id_thumb='') 
{ 
    if($id_thumb=='') 
    { 
     return false; 
    } 
    $this->db->where('id_thumb', $id_thumb); 
    $this->db->join('images', 'images.id_image = thumbs.id_image', 'left'); 
    $sql = $this->db->get('thumb'); 
    $obj = $sql->row(); 
    if($obj) 
    { 
     return $obj; 
    } 
} 

Выход будет:

0 => 
    object(stdClass)[35] 
     public 'id_product' => string '1000' (length=4) 
     public 'name' => string 'Graham Corners' (length=14) 
     public 'description' => string 'Et ea quaerat totam temporibus quis. Ut fugiat blanditiis vel corporis minus veniam. Consequatur corporis sint sed assumenda itaque ratione ipsum distinctio. Voluptate autem quo sunt rerum.' (length=189) 
     public 'date_c' => string '2015-12-28 03:12:59' (length=19) 
     public 'date_u' => null 
     public 'id_category' => string '7' (length=1) 
     public 'id_user' => string '173' (length=3) 
     public 'alias' => string 'graham-corners' (length=14) 
     public 'active' => string '1' (length=1) 
     public 'id_thumbs' => '4998,4997,...' 

Тогда вы можете получить обратно ПОЛУЧИТЬ изображения данные по id_thumb с использованием метода взрыва:

$arr_id_thumbs = explode(",",$id_thumbs); 
foreach($arr_id_thumbs as $row) 
{ 
    $obj_image_data = $this->model_name->get_image_data_by_id_thumb($id_thumb); 
    $thumb_path = $obj_image_data->thumb_path; 
    $image_path = $obj_image_data->image_path; 
    ....................... 
} 

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

+0

thx, я вижу вашу точку. Я попробую код позже сегодня и дам вам знать, если он работает. –

+0

его работа, спасибо –

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