Welcome Guest, Not a member yet? Register   Sign In
Generate Table from DB Query - Newbie question
#1

[eluser]seanloving[/eluser]
Hi. Newbie here (let me know if I'm doing things right or wrong on this forum).

For a given rental order I need to display a list of associated rental items. Three classes (tables) are modeled as follows:

rental_items(item_id, item_desc, mfr_pn, mfr_sn)
rental_orders(order_id, customer, salesman)
rental_orms(orm_id, order_id, item_id)

The index() of the default rentals.php controller puts all the records from 'rental_orders' in data['pending'] and sends it to the summary.php view for use as $pending.

Code:
class Rentals extends Controller {

    function Rentals()
    {
        parent::Controller();
        $this->load->helper('url');
    }

    function index()
    {
        $data['pending']=$this->db->get('rental_orders');
        $this->load->view('summary', $data);
    }

    function pending( $order=0 )
    {
        // get the requested pending rental order (gets a single record)
        $data['pending']=$this->db->get_where('rental_orders', array('order_id =' => $order));
        
        // get all the records from 'rental_orms' that have order_id=$order.  
        // this builds the list of item_id records to fetch from the 'rental_items' table
        $data['orms']=$this->db->get_where('rental_orms', array('order_id =' => $order));
        
        // calculate the list of rental items to display on the pending rental order page
        foreach( $data['orms']->result_array() as $itemq )
        {
            $data['items']=$this->db->get_where('rental_items', array('item_id =' => $itemq['item_id']));
        }
        $this->load->view('pending', $data);
    }
...

When the requested url is
Code:
example.com/index.php/rentals/pending/2
the value 2 is passed to the method called pending() in the rentals.php controller. The method pending() queries 'rental_orms' to retrieve all records having the user-selected order_id. The resulting records are stored in data['orms'].

Now my problem is here. Instead of generating the table of records from 'rental_orms', I want to generate a table of records from 'rental_items', based on the same list of returned item_id values from the previous query of 'rental_orms'.

In my pending.php view (not shown) $items only contains the last expected record. In my controller code above, how do I make data['items'] include all the records before my call to the pending.php view??

Thanks for any advice.

Sean Loving
#2

[eluser]TheFuzzy0ne[/eluser]
Welcome to the CodeIgniter forums.

If I understand you correctly, this is what you need:
Code:
$data['items'][]=$this->db->get_where('rental_items', array('item_id =' => $itemq['item_id']));

The way it's done currently, it overwrites the $data['items'] variable. By appending a set of empty square brackets, $data['items'] is treated as an array, and the new database result is pushed onto the end of that array.

Hope this helps.
#3

[eluser]seanloving[/eluser]
Yes that helps, thanks.
Seems like I'm still learning the difference between objects and arrays, and in CI I'm trying to understand when to use result() and result_array(). I saw the post on "num_rows() always showing 0", but I think OO might be my problem. I will explore in another post...




Theme © iAndrew 2016 - Forum software by © MyBB