dongli8722 2015-12-28 11:28
浏览 28
已采纳

在一条记录上加入一个表的多行(Codeigniter 3)

I would like to build query which returns product with all images not only with one image.
This is my model for fetching products

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

And this is output

  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)

Cause i wan't to fetch all images of desired product i need to build a query which will output all product images under object product stored in some array or something
Desired output object should look similar to this

  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)
                 ........................

)

Thank you in advance

  • 写回答

1条回答 默认 最新

  • dongsi3826 2015-12-28 12:12
    关注

    For me, you should combine only id_thumb as id_thumbs instead of all image data into images column. For example:

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

    And in your model make a function called as get_image_data_by_id_thumb as below:

    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;
        }
    }
    

    The output will be:

    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,...'
    

    Then you can fetch back by get image data by id_thumb using explode method:

    $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;
        .......................
    }
    

    Hope it helps.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在ns3中实现路径的自由切换
  • ¥20 SpringBoot+Vue3
  • ¥15 IT从业者的调查问卷
  • ¥65 LineageOs-21.0系统编译问题
  • ¥30 关于#c++#的问题,请各位专家解答!
  • ¥15 App的会员连续扣费
  • ¥15 不同数据类型的特征融合应该怎么做
  • ¥15 用proteus软件设计一个基于8086微处理器的简易温度计
  • ¥15 用联想小新14Pro
  • ¥15 multisim中关于74ls192n和DSWPK开关仿真图分析(减法计数器)