CI -将一个变量从一个控制器传递到两个模型/视图


CI - Pass a variable from 1 controller to two models/views

谁能解释为什么我不能得到一个名为$siteID的变量传递到同一控制器内的另一个函数?

在第三个名为"get_orders_by_site"的函数中,我加载了一个不同的模型,它返回有关当前查看的建筑/站点/属性中引发的"订单"的信息。

站点控制器工作得很好,第一个函数列出了包含我所有属性的表,然后当单击其中一个时-第二个函数获得该选择的siteID,并返回进一步的'detail/data' -站点控制器函数1/2都与相同的模型相关,并返回来自相同表的信息。

我试图实现第三个函数,这将做一个类似的任务,但返回信息/数据从不同的表(网站)。siteID在订单中也是一个FK。我在phpmyadmin中创建了siteID表).

如果我需要进一步解释请让我知道-非常感谢!

<

修改代码/strong>

<

站点控制器/strong>

<?php
class Sites extends CI_Controller {
//Searches for a list of sites
public function search($sort_by = 'site_title', $sort_order = 'asc', $offset = 0)
{
$limit = 20;
$data['columns'] = array(
    'site_title' => 'Site Name',
    'site_uprn' => 'Unique Property Reference'
);
$this->load->model('site_model');
    $results = $this->site_model->get_sites($limit, $offset, $sort_by, $sort_order);
    $data['sites'] = $results['rows'];
    $data['num_results'] = $results['num_rows'];

    //pagination for list returned
    $this->load->library('pagination');
    $config = array ();
    $config['base_url'] = site_url("Sites/search/$sort_by/$sort_order");
    $config['total_rows'] = $data['num_results'];
    $config['per_page'] = $limit;
    $config['uri_segment'] = 5;
    $this->pagination->initialize($config);
    $data['pagination'] = $this->pagination->create_links();
    $data['sort_by'] = $sort_by;
    $data['sort_order'] = $sort_order;
    $this->load->view('search', $data);
}
//Displays individual site details
//passes selected siteID to the model, and returns only database/info for that particular building/property
public function details($siteID){
$this->load->model('site_model');
    $data['site']=$this->site_model->get_site($siteID);
    $this->load->view('site', $data);
    $this->load->view('orders', $data);     
}

//第二个函数应该做类似的方法如上,但是我已经加载了一个不同的模型,因为我从不同的数据库表中获取信息-但我仍然希望返回的数据受到用户选择的建筑/站点ID的限制。

public function orders_by_site($siteID, $sort_by = 'orderID', $sort_order = 'asc', $offset = 0)
    {   
        $this->load->model('site_model');
        $this->load->model('order_model');
        $limit = 20;
        $data['columns'] = array(
            'orderID' => 'Order No.',
            'initiated_date' => 'Initiated Date',
            'target_date' => 'Target Date',
            'status' => 'Status',
            'priority' => 'Priority',
            'trade_type' => 'Trade Type'
        );

            $results = $this->site_model->get_site($siteID);
            $results = $this->order_model->get_orders($siteID, $limit, $offset, $sort_by, $sort_order);
            $data['orders'] = $results['rows'];
            $data['num_results'] = $results['num_rows'];

    //pagination for orders table
        $this->load->library('pagination');
        $config = array ();
        $config['base_url'] = site_url("Orders/orders_by_site/$sort_by/$sort_order");
        $config['total_rows'] = $data['num_results'];
        $config['per_page'] = $limit;
        $config['uri_segment'] = 6;
        $this->pagination->initialize($config);
        $data['pagination'] = $this->pagination->create_links();
        $data['sort_by'] = $sort_by;
        $data['sort_order'] = $sort_order;

        $this->load->view('orders', $data);
}
}       

终端站点控制器

<

网站模型/strong>

//获取所有站点数据

function get_sites($limit, $offset, $sort_by, $sort_order){
    $sort_order = ($sort_order == 'desc') ? 'desc' : 'asc';
    $sort_columns = array('site_title', 'site_uprn');
    $sort_by = (in_array($sort_by, $sort_columns)) ? $sort_by : 'site_title';
     $q = $this->db->select('siteID, site_title, site_uprn')
        ->from('sites')
        ->limit($limit, $offset)
        ->order_by($sort_by, $sort_order);
    $ret['rows'] = $q->get()->result();
     //count query for sites
    $q = $this->db->select('COUNT(*) as count', FALSE)
        ->from('sites');
    $tmp = $q->get()->result();
    $ret['num_rows'] = $tmp[0]->count;
    return $ret;
    }

//获取各个站点的数据

function get_site($siteID){
    $this->db->select()->from('sites')->where(array('siteID' => $siteID));
    $query = $this->db->get();
    return $query->first_row('array');
    }

}

<

订单模型/strong>

//order table
function get_orders($siteID, $orderID, $limit, $offset, $sort_by, $sort_order){
    $sort_order = ($sort_order == 'desc') ? 'desc' : 'asc';
    $sort_columns = array('orderID', 'initiated_date', 'target_date','completion_date','status','priority','total_amount','job_description','requestor_name','requestor_telno','trade_type');
    $sort_by = (in_array($sort_by, $sort_columns)) ? $sort_by : 'orderID';
    $q = $this->db->select()->from('orders')->where(array('siteID' => $siteID))->limit($limit, $offset)->order_by($sort_by, $sort_order);
    $ret['rows'] = $q->get()->result();
    }
//order details
function get_order($orderID){
$this->db->select()->from('orders')->where(array('orderID' => $orderID));
$query = $this->db->get();
return $query->first_row('array');
}

}

站点视图-仅显示我试图嵌入订单视图的摘录

<h5>Order Details</h5>
 <?php include('orders.php')?>
 </div>  
      </div>
</div>
<

命令视图/strong>

 <div id="site_filter">
  <div class="result_counter">
  <h5>Found <?php echo $num_results; ?> Orders</h5>
  </div>
   <div class="pagination">
   <?php if(strlen($pagination)): ?>
Page: <?php echo $pagination; ?>
    <?php endif; ?>
    </div>  
  </div>
  <div class="clear_float"></div>
    <table class="table">
    <thead>
        <?php foreach($columns as $column_name => $column_display): ?>
        <th <?php if ($sort_by == $column_name) echo "class='"sort_$sort_order'"" ?>>
            <?php echo anchor("Sites/orders_by_site/$column_name/" .
                (($sort_order == 'asc' && $sort_by == $column_name) ? 'desc' : 'asc') ,
                $column_display); ?>
        </th>
        <?php endforeach; ?>
    </thead>
        <tbody>
        <?php foreach($orders as $order): ?>
        <tr>
            <td><a href="<?php echo base_url(); ?>Orders/order_detail/<?php echo $order->orderID; ?>"><?php echo $order->orderID; ?></a></td>
            <td><?php echo $order->initiated_date; ?></td>
            <td><?php echo $order->target_date; ?></td>
            <td><?php echo $order->status; ?></td>
            <td><?php echo $order->priority; ?></td>
            <td><?php echo $order->trade_type; ?></td>
        </tr>
        <?php endforeach; ?>
        </tbody>
    </table>

好了,这里有几件事——我需要一些帮助

orders_by_site方法中,您将覆盖results变量:

$results = $this->site_model->get_site($siteID);
$results = $this->order_model->get_orders($siteID, $limit, $offset, $sort_by, $sort_order);

另外,你加载视图的方式是不正确的。你像这样加载你的视图:

$this->load->view('site', $data);
$this->load->view('orders', $data);

你需要做的是:

// you need to get the "contents" of the `orders` view in a variable 
// and pass that to the `site` view
$data['orders'] = $this->load->view('orders', $data, TRUE);
$this->load->view('site', $data);

并将站点视图更改为:

<h5>Order Details</h5>
 <?php echo $orders; ?>
 </div>  
      </div>
</div>

我相信还有更多的事情要做,但这就是我从你的问题和评论中所看到的。

@swatkins -

非常感谢你的帮助,你强调了我忽略的一些问题——我现在已经用不同的方式处理了。

最初我试图使用活动记录(我相信)从一个表中选择数据,基于从不同表中选择记录-然后将此选择传递到另一个模型并在get_where语句中使用它。

我已经设法让这工作使用$this->uri->段()方法在我的控制器,然后传递到相应的模型。

现在我能够利用用户选择的"建筑/属性"名称,它的地址等-然后我有第二个模型,它检索"订单/工作",已经提出了在该建筑