当我从数据库循环数据时,我需要从中再次查询值。我直接从视图查询数据库。我想知道那是我的代码错了吗?如果错了什么是更好的方法?
foreach($data->result() as $row1) {
echo '<li>';
echo $row1->Name;
echo '<ul>';
$this->db->select('Photo');
$this->db->from('tblPhoto');
$this->db->where('User_id', $row1->User_id);
$photo = $this->db->get();
foreach($photo->result() as $row2) {
echo '<li>';
echo $row2->Photo;
echo '</li>';
}
echo '</ul>';
echo '</li>';
}
答案 0 :(得分:3)
您的工作方式可行,但您可能需要考虑分离代码以使代码更具可重用性。例如:
&lt; ~~~~ controller ~~~~~&gt;
// your_controller.php:
$this->load->model('your_model');
$data = $this->your_model->get_data();
foreach($data as $key => $obj)
{
$data[$key]->photos = $this->your_model->get_photos($obj->User_id);
}
$this->load->view('test', array('my_data' => $data));
&lt; ~~~~ model ~~~~~&gt;
// your_model.php
function get_data()
{
return $this->db->get('yourTable')->result();
}
function get_photos($user_id)
{
return $this->db->get_where('tblPhoto', array('User_id' => $user_id))->result();
}
&lt; ~~~~查看~~~~~&gt;
your_view.php
<?php foreach($my_data as $row1): ?>
<li>
<?php echo $row1->Name;?>
<ul>
<?php foreach($row1->photos as $row2): ?>
<li><?php echo $row2->Photo; ?></li>
<?php endforeach; ?>
</ul>
</li>
<?php endforeach; ?>
答案 1 :(得分:2)
理想情况下,查看不适合这样做。
首先,所有数据必须在控制器/模型之间处理,并且应该传递给视图。
如果您想要在渲染后从视图中获取数据,则应该从视图到控制器进行ajax调用,然后让控制器从模型(数据层)获取数据。
使用来自控制器的数据进行响应,以查看和反映视图中的html更改,具体取决于收到的数据(如果需要进行任何更改)。
MVC架构应该如何。
答案 2 :(得分:1)
@lyhong,您的代码编程正确。
但是,建议使用Codeiginter MVC标准。
查询应位于Models中。
这样他们就可以重复使用了。
以视图编写的查询将仅用于该视图。
此外,如果您在View文件中编写查询,则应发生以下问题:
$row1->User_id
错误应直接显示在页面上。此外,它会慢慢加载您的视图文件。
坚持MVC标准的好处是巨大的可扩展性。
答案 3 :(得分:0)
公认的答案当然是最好的。我想说的是/ WHY /,我们不应该在视图内进行数据库查询。想象一下视图就是这样-视图,查看数据的方式或查看数据的版本(可以多种方式呈现,并且呈现方式的版本可能会随着时间而改变,例如FaceBook现在看起来比10年前要好。
HTML视图只是其呈现方式之一;数据可以以PDF,电子表格,供微服务使用的JSON包等形式“查看”。因此,如果您不调用数据库获取更多信息,则表明您已经很好地配置了您的数据,并且很可能可以多种方式可靠地使用它。
好的,你猜怎么着? 我刚才所说的一切都是垃圾。我希望你不相信。实际上,现代的演示和自定义呈现了它们自己的复杂性,因此,如何呈现视图取决于数据是什么,对它的结果查询将使所需的$data
有效载荷变得更加复杂并可能会花费不必要的时间处理不想显示的内容。一直运行到逻辑上的结论,您将看到将所有可能的方案传递给视图数据的局限性。
@abhinsit上面所说的关于通过AJAX调用辅助内容的说法是有道理的,但是要知道这会增加复杂性。但是,如果做得好的话,可以节省时间并简化总体的工作。一个很好的例子是通过使用AJAX进行后期渲染来包括用户信息(Hello John Smith)。如果看到在视图中调用数据库的必要性,不要感到内,但是请尝试构建视图(和整个框架)的结构,以便重要的事情已经处于状态中。