首页 文章

将多个查询结果加载到视图中

提问于
浏览
-1

我从数据库中获取数据并且必须在我的视图部分中显示它,实际上,我不知道如何在我的视图中获取我获取的数据?

而且还没有正确创建控制器,那么我的控制器中还剩下什么?

这是模特

public function getPlanById($planId){    
    $this->db->where('plan_id', $planId);           
    $query = $this->db->get('tbl_plan');       
 }

public function getPlanAndTaskMappingByPlanId($planId){
    $this->db->where('plan_id', $planId);
    $query = $this->db->get('plan_task_mapping');
    return $query->result();    
}    

public function getAllVeddingTask(){        
    $query = $this->db->get('vedd_plan_task');
    return $query->result();
}

而控制器是

$veddingPlanData = $this->PlanModel->getPlanById($planId);  
$veddingPlanTaskMappingData = $this->PlanModel->getPlanAndTaskMappingByPlanId($planId);
$allVedingTasks = $this->VeddingTaskModel->getAllVeddingTask();

当我盯着学习Codeigniter时,我问过这个问题 . 所以我想添加正确的方法来将查询结果加载到视图中 . 将查询结果传递给控制器,然后加载该视图:

public function controller_function(){
    $veddingPlanData = $this->PlanModel->getPlanById($planId);   
    $veddingPlanTaskMappingData = $this->PlanModel->getPlanAndTaskMappingByPlanId($planId);
    $allVedingTasks = $this->VeddingTaskModel->getAllVeddingTask();

    $this->load->view('your_view',['veddingPlanData' => $veddingPlanData, 
    'veddingPlanTaskMappingData'=>$veddingPlanTaskMappingData,
    'allVedingTasks'=>$allVedingTasks
    ]);
}

3 回答

  • 1

    首先,你要调整你的模型 - 下面我将向你展示一个例子

    public function getPlanById($planId)
    {
    
        $this->db->where('plan_id', $planId);
        $query = $this->db->get('tbl_plan');
    
        $arrData = array();
    
        if ($query->num_rows() > 0)
        {
            foreach($query->result() AS $row)
            {
                $arrData[] = $row;
            }
        }
    
        return $arrData;
    }
    
    public function getPlanAndTaskMappingByPlanId($planId)
    {
        $this->db->where('plan_id', $planId);
        $query = $this->db->get('plan_task_mapping');
    
        $arrData = array();
    
        if ($query->num_rows() > 0)
        {
            foreach($query->result() AS $row)
            {
                $arrData[] = $row;
            }
        }
    
        return $arrData;
    }
    
    
    public function getAllVeddingTask()
    {
        $query = $this->db->get('vedd_plan_task');
        $arrData = array();
    
        if ($query->num_rows() > 0)
        {
            foreach($query->result() AS $row)
            {
                $arrData[] = $row;
            }
        }
    
        return $arrData;
    }
    

    现在你的控制器应该是这样的

    class YourController extends CI_Controller
    {
        public function your_method()
        {
            $this->load->model("PlanModel");
            $this->load->model("VeddingTaskModel");
    
            $arrViewData = array(
                "arrVeddingPlanData" => $this->PlanModel->getPlanById($planId),
                "arrVeddingPlanTaskMappingData" => $this->PlanModel->getPlanAndTaskMappingByPlanId($planId),
                "arrAllVedingTasks" => $this->VeddingTaskModel->getAllVeddingTask()
            );
    
    
            $this->load->view("yourview", $arrViewData);
        }
    }
    

    最后是你的观点的一个例子

    foreach($arrVeddingPlanData AS $objWeddingPlan)
    {
        var_dump($objWeddingPlan);
    }
    

    除了给定的例外,我强烈建议 - 不要只返回模型中的结果,而应该在模型中为您的需求准备数据并将数据数组返回给传递的控制器

  • 2

    将控制器更新为以下代码

    $data['veddingPlanData'] = $this->PlanModel->getPlanById($planId);
    $data['veddingPlanTaskMappingData'] = $this->PlanModel->getPlanAndTaskMappingByPlanId($planId);
    $data['allVedingTasks'] = $this->VeddingTaskModel->getAllVeddingTask();
    
    $this->load->view('front/view', $data);
    

    replace 'front/view' 与您查看文件的路径/名称 .

    To access data ,在您的视图文件 var_dump()print_r() 变量 $veddingPlanData$veddingPlanTaskMappingData$allVedingTasks

  • 3

    因为我无法发表评论

    首先尝试 var_dump($veddingPlanTaskMappingData) var_dump($allVedingTasks) 并检查从数据库中获取的内容..

    也尝试这个链接,它将帮助您实现您正在寻找的:

    https://stackoverflow.com/a/31115876/5058701

    更新:(因为你想在视图中预览数据)::

    //in your model:
    function QueryResult($customQuery) {
        $query = $this->db->query($customQuery);
        if (!$query) {
            return FALSE;
        } else {
            if ($query->num_rows() > 0) {
                foreach ($query->result() as $row) {
                    $data[] = $row;
                }
                return $data;
            }
            return false;
        }
    }
    
    //in your controller
    $this->load->model("Model_Name","ShortName",true);
    $data['arr'] = $this->ShortName->QueryResult("select col1,col2 from table where id=2");
    $this->load->view('welcome', $data);
    
    //in your welcome view: assuming you only have 2 inputs box and one row in database for that two input boxes
    foreach($data['arr'] as $arr){
      echo "<input type='text' name='col1' value='$arr->col1'>";
      echo "<input type='text' name='col2' value='$arr->col2'>";
    }
    

    希望这可以帮助...

相关问题