简体   繁体   English

Codeigniter模型,用于将每个数组传递给控制器​​->查看

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM