2015-10-17 47 views
-1

我會盡力解決它。爲什麼在我的mysql查詢的WHERE部分中使用常量值並且使用變量時,我沒有在codeigniter中排序

我想在Codeigniter中通過desc或asc對用​​戶列表進行排序。

控制器看起來是這樣的 -

/** 
* List issues by specified user 
*/ 
public function ByUser($sort_by = 'issue_date', $sort_order = 'desc') 
{ 
    /** 
    * Store _POST value from dropdown in variable - $user_type. 
    * Pass that value to model to get issues only "by that user" 
    */ 
    $user_type = $this->input->post('issues-by-user'); 

    $data['records'] = $this->report_model->issues_by_user($sort_by,$sort_order, $user_type); 

    $data['main_content'] = 'report'; 
    $data['title'] = 'MarksMate Report'; 
    $this->load->view('includes/template', $data); 
} 

在我型號,我有一個內部聯接聯接兩個表,並通過特定的用戶獲取的問題。

型號方法是這樣的 -

public function issues_by_user($sort_by, $sort_order, $user_type) 
{ 
    $sort_order = ($sort_order == 'asc') ? 'asc' : 'desc'; 
    $sort_columns = array('id', 'issue_date'); 
    $sort_by = (in_array($sort_by, $sort_columns)) ? $sort_by : 'issue_date'; 

    $query = $this->db->select('tblissue.id, student_id, issue_date, issue_title, issue_description, issue_screenshot, first_name, last_name, email_id, role') 
        ->from('tblissue') 
        ->join('tblstudentprofile', 'tblissue.student_id=tblstudentprofile.id') 
        ->where('role', $user_type) 
        ->order_by($sort_by, $sort_order); 

    $records = $query->get()->result_array(); 

    return $records; 
} 

查詢工作正常。 (檢查它使用print_r)

但是,當我將URL更改爲 - 「http://localhost/anothertrack/report/ByUser/id/asc」,所有記錄被提取消失。如果我print_r,我看到的只是一個空數組。但是,如果我從->where('role', $user_type)刪除變量$user_type,而不是像0或1或2(0,1,2,3是我在數據庫中設置的枚舉值)常數值,然後它的工作原理。

我檢查了mysql查詢的語法,但它很好。我也經歷了Codeigniters URI類手冊。我不知道我的代碼中哪裏可能是錯的。幫我?請?

+0

什麼返回收到的var_dump()GET paramete RS? –

+0

顯然,$ user_type沒有正確設置... – Devon

+0

@SergioIvanuzzo謝謝塞爾吉奧。這是我得到'array(0){}' – pistonracer

回答

1

的問題在這裏:

$user_type = $this->input->post('issues-by-user'); 

當你直接去http://localhost/anothertrack/report/ByUser/id/asc

有沒有POST數據。您可以使用Codeigniter分割方法。 E.g:

$user_type = $this->uri->segment(6); 

現在,你可以去:

http://localhost/anothertrack/report/ByUser/id/asc/issuebyuser

+0

謝謝。如果我像指定'$ user_type = $ this-> uri-> segment(6)那樣指定段,則不起作用;'如果我不指定段,則工作。爲什麼和如何? – pistonracer

+0

'segment(6)'將搶佔'issuebyuser' ...如果你沒有指定那麼'$ user_type'將不會被設置爲null或爲空...... 所以你需要指定'issubyuser '需要放在你的網址上。 你可以參考這個URL的更多細節: https://ellislab.com/codeigniter/user-guide/libraries/uri.html – Nere

0

這裏是我的另一個建議,你可以用笨會話。我意識到自己的工作流程註釋:從下拉可變

/** * 商店_POST價值 - $ USER_TYPE。 *傳遞價值模型「由用戶」 */

public function ByUser($sort_by = 'issue_date', $sort_order = 'desc') 
{ 
    /** 
    * Store _POST value from dropdown in variable - $user_type. 
    * Pass that value to model to get issues only "by that user" 
    */ 

    $user_type = $this->input->post('issues-by-user'); 
    if($user_type) 
    { 
     $this->session->set_userdata('issues-by-user'); 
    } 

    $data['records'] = $this->report_model->issues_by_user($sort_by,$sort_order, $user_type); 

    $data['main_content'] = 'report'; 
    $data['title'] = 'MarksMate Report'; 
    $this->load->view('includes/template', $data); 
} 

,並在模型中只得到問題:

public function issues_by_user($sort_by, $sort_order, $user_type) 
{ 
    $sort_order = ($sort_order == 'asc') ? 'asc' : 'desc'; 
    $sort_columns = array('id', 'issue_date'); 
    $sort_by = (in_array($sort_by, $sort_columns)) ? $sort_by : 'issue_date'; 

    $query = $this->db->select('tblissue.id, student_id, issue_date, issue_title, issue_description, issue_screenshot, first_name, last_name, email_id, role') 
        ->from('tblissue') 
        ->join('tblstudentprofile', 'tblissue.student_id=tblstudentprofile.id') 
        ->where('role', $this->session->userdata('issues-by-user')) 
        ->order_by($sort_by, $sort_order); 

    $records = $query->get()->result_array(); 

    return $records; 
} 

所以,你可以使用當前的URL,以獲取問題只能由該用戶

http://localhost/anothertrack/report/ByUser/id/asc/ 
相關問題