【问题标题】:Codeigniter DATABASE TroubleCodeigniter 数据库故障
【发布时间】:2016-06-12 12:49:02
【问题描述】:

问题是当我使用这段代码时

在我的模型中:

public function get_all_subject_tasks(){
$this->db->select('*');
$this->db->from('task'); 
$this->db->where("user_id",$this->session->userdata('user_id'));  
$this->db->order_by("task_id", "desc");    
$query_result=$this->db->get();
$result=$query_result->result();
return $result;
}                    

在我的控制器中:

public function subjects($t,$action=""){
        $data=array();
        $data['subject_tasks']=$this->Schoolmodel->get_all_subject_tasks($t);
        if($action=='asyn'){
          $this->load->view('theme/task',$data);
        }else{    
          $this->load->view('theme/include/header');
        $this->load->view('theme/include/school_sidebar');
          $this->load->view('theme/task',$data);
          $this->load->view('theme/include/footer');
        }
    }        

在我的 php 页面

<div class="panel-body">
       <table id="teacher_table" class="table table-striped table-bordered table-condensed">
        <th>Name</th><th><?php get_phrase('teacher_email') ?></th><th width="110"><?php get_phrase('action') ?></th>
       <?php foreach($subject_tasks as $list){ ?>
        <tr>
        <td class="task_name"><?php echo $list->task_name ?></td>
        <td class="task_desc"><?php echo $list->task_desc ?></td>
        </tr>
       <?php } ?>
        </table>
    </div>

我得到了数据库中的所有任务,没有任何主题过滤器。

所以我的问题是 我如何让页面根据他们所在的主题来回显任务


这也是我如何设置我的数据库结构

  1. subject_id
  2. task_id
  3. 任务名称
  4. task_desc
  5. user_id

其中 subject_id 是插入任务的主题的 id。

【问题讨论】:

  • 您现在有什么问题? where 内部模型不正确。
  • 我的问题是我只希望某个主题中的任务显示在任务页面上。如何更正模型中的“where”代码?
  • 您是否收到错误或正在显示所有任务?路由是怎么配置的?
  • 我什么都没有显示,数据库中没有数据显示。这就是链接的样子domain.com/School/subjects/14
  • 首先你需要display errors找出问题所在。

标签: php mysql database codeigniter


【解决方案1】:
<?php 

// your model

public function getTask($subject_id)
{
    $result = $this->db
        ->where("subject_id", $subject_id) // !!!
        ->where("user_id", $this->session->userdata('user_id')) // !!!
        ->order_by("task_id", "desc")
        ->get('tasks');

    return $result->num_rows() > 0 ?
        $result->result() : false;
}

// your class

class School extends CI_Controller {

    public function __construct() {
        parent::__construct();
        if($this->session->userdata('logged_in')==FALSE){
            redirect('User');
        }
        $this->load->database();
        $this->load->model('Schoolmodel');
        $this->load->library('form_validation');
    }

    public function subjects($subject_id,$action=""){
        $data=array();
        $data['subject_tasks'] = $this->Schoolmodel->getTask($subject_id);
        if($action=='asyn'){
            $this->load->view('theme/task',$data);
        }else{
            $this->load->view('theme/include/header');
            $this->load->view('theme/include/school_sidebar');
            $this->load->view('theme/task',$data);
            $this->load->view('theme/include/footer');
        }
    }

}

?>

// your view

    <div class="panel-body">
           <table id="teacher_table" class="table table-striped table-bordered table-condensed">
            <th>Name</th><th><?php get_phrase('teacher_email') ?></th><th width="110"><?php get_phrase('action') ?></th>
    <?php if(false !== $subject_tasks) { foreach($subject_tasks as $list){ ?>
        <tr>
            <td class="task_name"><?php echo $list->task_name ?></td>
            <td class="task_desc"><?php echo $list->task_desc ?></td>
        </tr>
    <?php } } ?>
    </table>
    </div>

【讨论】:

  • 如果要选择所有字段,则无需使用 ->select(*)。
  • 你可以使用 ->get('table') 代替 ->from('table') 和 ->get(); ,最好使用方法链:) ->met1()->met2()->...
【解决方案2】:

这是行不通的:

$this->db->where("subject_id",$subject_id AND "user_id",$this->session->userdata('user_id'));  

来自Active Record documentations:多次调用where 将导致AND

$this->db->where("subject_id", $subject_id);
$this->db->where("user_id", $this->session->userdata('user_id'));  

【讨论】:

  • 感谢@Amir 的帮助。
猜你喜欢
  • 1970-01-01
  • 2010-11-06
  • 1970-01-01
  • 2014-02-21
  • 1970-01-01
  • 2012-02-26
  • 2018-08-17
  • 1970-01-01
  • 2011-09-12
相关资源
最近更新 更多