0

当我从数据库循环数据时,我需要从中再次查询的值。我直接从视图中查询数据库。我想知道我的代码错了吗?如果错了,更好的方法是什么?

    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>';
    }
4

4 回答 4

3

理想情况下,视图不是执行此操作的正确位置。

首先,所有数据都必须在控制器/模型之间进行处理,并且应该传递给视图。

如果你有一个场景,你想在渲染后从视图中获取数据,你应该从视图到控制器进行 ajax 调用,然后让控制器从模型(数据层)获取数据。

并响应来自控制器的数据以查看和反映视图中的 html 更改,具体取决于收到的数据(如果需要任何更改)。

这就是MVC 架构应有的样子。

于 2013-08-21T08:53:05.943 回答
3

你这样做的方式会起作用,但你可能需要考虑分离你的代码以使你的代码更可重用。例如:

<~~~~ 控制器 ~~~~~>

// 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));

<~~~~模型~~~~~>

// 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();
}

<~~~~查看~~~~~>

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; ?>
于 2013-08-21T12:16:08.663 回答
1

@lyhong,您的代码在编程上是正确的。

但是,建议使用 Codeiginter MVC 标准。

查询应该驻留在模型中。

以便它们可以重复使用。

用视图编写的查询将只服务于该视图。

此外,如果您在查看文件中写入查询,应该会出现以下问题:

  • 如果你没有得到 $row1->User_id 错误应该直接显示在页面上。

此外,它会缓慢加载您的视图文件。

坚持 MVC 标准的好处是巨大的可扩展性。

于 2013-08-21T11:04:41.003 回答
0

公认的答案肯定是最好的。我会说值得描述/为什么/我们不在视图内进行数据库查询。将视图想象成那样——视图,或查看数据的方式,或查看数据的版本(它可以以多种方式呈现,并且呈现方式的版本可能会随着时间而改变,例如它们的方式Facebook 现在看起来与 10 年前相比)。

HTML 视图只是它的一种呈现方式;可以将数据“查看”为 PDF、电子表格、微服务使用的 JSON 包等。因此,如果您没有调用数据库以获取更多信息,这很好地表明您已经很好地配置了您的数据,并且很可能可以以多种方式可靠地使用它。

好吧,那你猜怎么着? 我刚才说的都是垃圾。我希望你不相信。实际上,现代演示和定制呈现出它们自己的复杂性,因此如何呈现视图取决于数据是什么,由此产生的查询将使所需的$data有效负载变得更加复杂,并可能花费不必要的时间对于不想展示的东西。运行到它的逻辑结论,你会看到通过视图数据传递每个可能的场景的局限性。

@abhinsit 上面所说的关于通过 AJAX 调用辅助内容的观点是正确的,但要知道这会增加复杂性。但如果做得好,它可以节省时间并使事情变得更简单。一个很好的例子是通过使用 AJAX 进行后渲染来包含用户信息(Hello John Smith)。如果您在视图中看到调用数据库的有效需求,请不要感到内疚,但请尝试构建您的视图(以及您的整个框架),以使重要的事情已经处于状态。

于 2020-12-12T19:10:25.847 回答