Codeigniter – Combinar tres tablas en el formato de vista correcto

Completamente confundido sobre cómo lograr algo, tengo tres tablas;

  • Pedidos
  • Artículos
  • Productos

La tabla de pedidos contiene los detalles de un pedido, la tabla de artículos contiene un número de identificación del producto y un número de identificación del pedido, y la tabla de productos contiene todos los detalles del producto.

Lo que estoy tratando de hacer es tener una página de “Mis pedidos”, donde puede ver todos sus pedidos anteriores, y lo que me gustaría es poder tener la siguiente estructura …

PEDIDOS

NÚMERO DE PEDIDO 1

  • Ejemplo de artículo de pedido
  • Segundo artículo de pedido de ejemplo
  • Ejemplo de tercer artículo de pedido

NÚMERO DE PEDIDO 2

  • Ejemplo de artículo de pedido
  • Segundo artículo de pedido de ejemplo
  • Ejemplo de tercer artículo de pedido

NÚMERO DE PEDIDO 3

  • Ejemplo de artículo de pedido
  • Segundo artículo de pedido de ejemplo
  • Ejemplo de tercer artículo de pedido

Ahora puedo enumerar fácilmente todos los pedidos, y puedo enumerar todos los artículos en un orden en particular, pero estoy perdido en cómo combinar estas tres tablas de una manera en que puedo enumerarlas en el formato anterior, supongo que puedo UNIRME en los tres, pero no puedo hacer que salgan en ninguna parte cerca de la forma correcta.

¿Alguien sabe una buena manera de hacer esto? Muchas gracias de antemano.

Puede utilizar una consulta unida para obtener todos los pedidos con sus artículos

/* raw sql query */ SELECT o.*,p.*,o.id AS order_id,p.id AS product_id FROM Orders o LEFT JOIN Items i ON (o.id=i.order_id) LEFT JOIN Products p ON(p.id = i.product_id) ORDER BY order_id 

Cree una función en su modelo y ejecute debajo de la consulta

 /* Using Active record */ $orders=$this->db->select('o.*,p.*,o.id AS order_id,p.id AS product_id') ->from(' Orders o ') ->join(' Items i','o.id=i.order_id','LEFT') ->join(' Products p','p.id = i.product_id','LEFT') ->order_by('order_id') ->get() ->result(); 

Obtenga sus resultados del modelo en el controlador y luego páselo para verlo, en vista, puede recorrer sus registros de consulta como

 $currentParent = false; foreach ($orders as $o) { if ($currentParent != $o->order_id) { echo '

ORDER NUMBER ' . $o->order_id . '

'; $currentParent = $o->order_id; } echo '

' . htmlentities($o->product_name) . '

'; }

Esto saldrá como

 

ORDER NUMBER 1

product 1

product 2

ORDER NUMBER 2

product 3

Si tiene una estructura html diferente, cámbiela según corresponda. He proporcionado el ejemplo anterior utilizando el encabezado y la etiqueta de párrafo.

Editar para usar tags de lista en tu puedes hacerlo

 echo '
  • '; $currentParent = false; foreach ($orders as $o) { if ($currentParent != $o->order_id) { if ($currentParent != false) { echo '
  • '; } echo '

    ORDER NUMBER ' . $o->order_id . '

      '; $currentParent = $o->order_id; } echo '
    • ' . htmlentities($o->product_name) . '
    • '; } echo '
  • ';

    Esto saldrá como

     
    • ORDER NUMBER 1

      • product 1

      • product 2

    • ORDER NUMBER 2

      • product 3