[英]Codeigniter model foreach pass array to controller -> to view
Here is my model - I want to assign the rows and echo out on the view page eg <?php echo $product?>
这是我的模型-我想分配行并在视图页面上回显,例如
<?php echo $product?>
class Model_products extends CI_Model {
function printer()
{
$id = $this->uri->segment(3, 0);
$q = $this->db->get_where('printer', array('id' => $id));
if ($q->num_rows == 1)
{
foreach ($q->result() as $row)
{
echo $row->name; # THIS WORKS
$data['product'] = $row->name; # THIS DOES NOT WORK
$data['desc'] = $row->description;
$data['size'] = $row->size;
$data['options'] = $row->options;
$data['more'] = $row->more_info;
}
}
}
}
Here's my controller 这是我的控制器
public function products()
{
$this->load->model('Model_products');
$this->Model_products->printer();
$this->load->view('products', $data);
$this->load->view('pricing');
}
My view is 我的看法是
<h1>
<?php echo $product; ?>
</h1>
<p>
<?php echo $desc; ?>
</p>
<h3>
Size
</h3>
<p>
<?php echo $size; ?>
</p>
How do I properly pass my model array to my controller so that I can echo out on my view? 如何正确地将模型数组传递给控制器,以便可以在视图中回显?
Simply return $data to controller 只需将$ data返回给控制器
class Model_products extends CI_Model {
function printer()
{
$data = array();
$id = $this->uri->segment(3, 0);
$q = $this->db->get_where('printer', array('id' => $id));
if ($q->num_rows == 1)
{
foreach ($q->result() as $row)
{
// echo $row->name; # THIS WORKS
$data['product'] = $row->name; # THIS DOES NOT WORK
$data['desc'] = $row->description;
$data['size'] = $row->size;
$data['options'] = $row->options;
$data['more'] = $row->more_info;
}
}
return $data;
}
}
No win Controller 没有胜利控制器
public function products()
{
$this->load->model('Model_products');
$data['products'] = $this->Model_products->printer();
$this->load->view('products', $data);
$this->load->view('pricing');
}
And in view 并鉴于
<?
echo '<pre>';
print_r($products);
?>
EDIT Also correct your model code. 编辑同时更正您的模型代码。
foreach ($q->result() as $row)
{
echo $row->name; # THIS WORKS
$data[]['product'] = $row->name; # THIS DOES NOT WORK
$data[]['desc'] = $row->description;
$data[]['size'] = $row->size;
$data[]['options'] = $row->options;
$data[]['more'] = $row->more_info;
}
If you are not using multidimensional array it will overwrite the last record. 如果您不使用多维数组,它将覆盖最后一条记录。
Where your return statement 您的退货声明
if ($q->num_rows == 1)
{
foreach ($q->result() as $row)
{
echo $row->name; # THIS WORKS
$data['product'] = $row->name; # THIS DOES NOT WORK
$data['desc'] = $row->description;
$data['size'] = $row->size;
$data['options'] = $row->options;
$data['more'] = $row->more_info;
}
return $data;
}
and/or in your controller 和/或在您的控制器中
public function products()
{
$this->load->model('Model_products');
$data = $this->Model_products->printer();
$this->load->view('products', $data);
$this->load->view('pricing');
}
You need to return the data from the model back to the controller and then from there, pass the data to the view. 您需要将数据从模型返回到控制器,然后再从那里将数据传递到视图。
In your model function, place a return statement at the end. 在模型函数中,在最后放置一个return语句。
return $data;
Then in your controller, assign the returned value from the model to a variable. 然后在控制器中,将模型返回的值分配给变量。
$data = $this->Model_products->printer();
Those 2 steps should fix your problem. 这两个步骤应该可以解决您的问题。
I used @raheel's code and it works. 我使用@raheel的代码,它可以工作。 But I would just change a bit:
但我只需要更改一下:
$i=0;
foreach ($q->result() as $row)
{
echo $row->name; # THIS WORKS
$data[$i]['product'] = $row->name; # THIS DOES NOT WORK
$data[$i]['desc'] = $row->description;
$data[$i]['size'] = $row->size;
$data[$i]['options'] = $row->options;
$data[$i]['more'] = $row->more_info;
}
This will help extracting the data 这将有助于提取数据
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.