因此,如何在视图上打印条件特定的结果,以防第二个块在Codeigniter中嵌套db查询


So how to print condition specific result on view in case the second block has nested db queries in Codeigniter?

所以我有这个现有的代码片段自定义php..我试图检查是否有现有的绘画细节在db..如果发现了绘画细节,我需要获得最新添加的细节,直到计数6 & &;相应地打印细节。这是我的代码->

<?php
    $pData=mysql_query("select * from painting_data");
    if($pData === FALSE) { 
        echo "<div class='well'>No painting available.</div>";
    }
    else{
        $pDet=mysql_query("Select * from painting_data order by padd desc limit 6");
        while($pD=mysql_fetch_assoc($pDet)){
            $pId=$pD['pid'];
            $pTitle=$pD['ptitle'];
            $pImg=$pD['pimg'];
?>
<div class="col-lg-2 col-md-4 col-sm-6 img-recent-container">
    <img role="button" class="img-thumbnail img-responsive img-recent" onclick="location.href='?p=<?php echo $pId; ?>'" src="..<?php echo $pImg;?>" alt="<?php echo $pTitle;?>"/>
</div>  
<?php   }
    } ?>

现在我是CI的新手。,我对如何正确分离数据检索感到困惑。因为else块中也有一个查询。我很困惑如何不包括它在视图

您应该只在模型中处理DB数据,并将返回的结果传递给控制器。它是MVC模式。

P_m.php(模型)

P_m extends CI_Model
{
    public $return = [];
    public function __construct()
    {
        parent::__construct();
        $this->load->database();//or load it in APPPATH . 'config/autoload.php'
    }
    public function p()
    {
        $q = $this->db->query("select * from painting_data");
        $return['error'] = $q->num_rows() > 0 ? FALSE : TRUE;
        $q->free_result();
        if ($return['error'] === FALSE)
        {
            $q = $this->db->query("Select * from painting_data order by padd desc limit 6");
            $this->return = $q->result();
        }
        return $return;
    }
}

P_c.php(控制器):

P_c extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->model('p_m');//if used more often, load it in APPPATH . 'config/config.php'
    }
    public function index()
    {
        $output_data['data_from_p_m'] = $this->p_m->p();
        $this->load->view('p_v', $output_data);
    }
}

p_v.php(视图):

if ( $data_from_p_m['error'] === FALSE ) 
{
    var_dump($data_from_p_m);
}
else
{
    echo "<div class='well'>No painting available.</div>";
}

你必须在while循环之前声明array才能获得所有6个$pId, $ptitle$pimg

看起来你在视图中做数据库查询,是吗?

应用程序流程应该是这样的:controller -> model -> controller -> view

控制器是用户访问您的网站url时着陆的地方。控制器调用模型,模型处理数据库并将结果返回给控制器(我更喜欢从db获取数据并填充数组,然后将该数组返回给控制器),然后控制器加载视图并提供数组。视图只是遍历数组,最好是在循环中创建html。还需要一些系统,以防数据库中没有记录或出现错误。

示例代码:
Controller :
class Mypage extends CI_Controller {
public function index (  )
{
    $this->load->model ( 'Mypage _model' );
    $data['dbdata'] = $this->mypage_model->get ();
    /** Check Errors */
    if ( $data['dbdata'] === FALSE ) { //show 404 or something else }
    $data[ 'title' ] = 'my Page';
    $this->load->view ( 'mypage', $data);
}
}

Model :
class Login_model extends CI_Model {
public function __construct()
{
    $this->error ['error'] = TRUE;
}
public function get (  )
{
    $data = array ();
    /** Get your database records here.*/
    if ( $some_error_condition ) return FALSE;
    if ( $no_records_found ) return $this->error;
    return $data;
}
}
View :
if ( isSet( $error ) ) // no records found.
{
   //do something
}
else {
   foreach ( $dbdata as $key => $value )
   {
       //do something
   }
}