用户
 找回密码
 入住 CI 中国社区
搜索
查看: 9029|回复: 8
收起左侧

[视图] 视图中如何嵌套循环,内层循环去查询数据库?【求解】

[复制链接]
发表于 2010-5-31 17:30:38 | 显示全部楼层 |阅读模式
现在有需求显示用户列表,用户信息中有用户的作品信息。
如下图所示:
未命名.jpg

现在把用户数据提取出来了。在Views里写了一个用户数组的foreach.

以下是测试代码。CI不支持View回调Model函数吧?
所以这样是行不通的。
PHP复制代码
<?php foreach ($members as $menber): ?>
<?php $sss=$this->OTHER_DB->get("works"); ?>
        <?php foreach ($sss as $studio): ?>
                <?php echo $studio['id']; ?>
        <?php endforeach; ?>
<?php endforeach; ?>
复制代码


有什么办法可以解决这个问题呢?除了在Model里把数据查询好。

这个应该算常用问题吧?如果你遇到过这种问题,怎么解决的分享一下吧!谢谢了!
发表于 2010-5-31 18:02:34 | 显示全部楼层
在model中把所有业务逻辑处理好,而view只是简单的foreach,至于怎么拼装,你可以用数组,也可以new 一个stClasss,用对象处理。
发表于 2010-5-31 18:26:47 | 显示全部楼层
楼上正解,所有业务逻辑及数据处理都尽量放在model中,试图只是显示内容的和简单的处理,尽量不要再视图中写你的业务逻辑
发表于 2010-5-31 20:46:16 | 显示全部楼层
回复 2# kkk


   同意。肯定是用数组将数据全部取出来,只不过这个数据可能是二维的或者三维的。$viewData = array(
    array('id'=>0,'name'=>'one','detail'=>'some'),
    array('id'=>1,'name'=>'two','detail'=>'some'),
    array('id'=>2,'name'=>'third','detail'=>'some')
);
在model中将查询结果组织成这种形式,在controller中调用model,将上述数据传递到视图中去,然后就能用你所说的for循环了。
发表于 2010-6-1 00:45:44 | 显示全部楼层
没错,应该是把视图所需要的所有数据全部准备好,再传递到视图,这是一个 mvc 的基本原则。
 楼主| 发表于 2010-6-1 09:49:57 | 显示全部楼层
谢谢大家,我知道怎么做了。写Model吧。

CI挺高效的,写起来也比较舒服。逻辑比较清楚!
发表于 2010-6-5 15:40:12 | 显示全部楼层
嵌套循环,最好的解决办法是,把相关数据都从数据库中取出并分别放入对应数组中。
然后在view中,执行相关的匹配条件,即可。
如:
foreach( (array)$array_a as $key => $a  )
{
  foreach( (array)$array_b as $key => $b )
  {
     if( $a['id'] == $b['id'] )
    {
       //你的表达式
    }
  }
}
发表于 2010-6-13 11:04:04 | 显示全部楼层
我也想知道
发表于 2013-2-22 14:18:44 | 显示全部楼层
学习了,呵呵呵!!!!

本版积分规则