iT邦幫忙

0

codeigniter model 參數傳送

Zaku 2017-06-16 13:58:345509 瀏覽

各位好想起問一下,
各位在用codeigniter時怎麼設計model?

像是前台可以發參數給controller,
contriller可以收,
但MODEL似乎無法接收參數,

這樣的話,
假設我動態接收sql搜尋條件,給contriller,
contriller要怎麼讓model知道我要搜尋的條件?


補充一下我的意思是說在MVC的前提之下,我要透過c去取m的data,但要如何傳參數過去才有辦法動態回復資料回來。

看更多先前的討論...收起先前的討論...
不是就controller再把參數傳給model就好了嗎?
然後事實上,在model下一樣是可以使用$this->input->post()的。
Zaku iT邦新手 5 級 ‧ 2017-06-16 14:45:39 檢舉
但在controller下取得MODEL ,$this->load->model();,這樣model()沒辦法丟參數過去
你要不要附上實際的code?
Zaku iT邦新手 5 級 ‧ 2017-06-16 15:24:30 檢舉
有解了,有點誤會他的機制,我自問自答一下$this->load->model('index');
$this->index->db(參數一,參數二....);,載入index model後,把參數丟給裡面的db再return回來。不知還有沒有其他方法?

1 個回答

2
Samと可樂快跑
iT邦研究生 3 級 ‧ 2017-06-16 15:28:18

$this->load->model()是用來載入mode class並做成controller底下的物件屬性之一。
並不是這樣就用了model。

假設你像這樣實作了一個model

class User extends CI_Model {
    
    function getName(){
        return $this->input->post('name');
    }

}

你在controller要這樣使用

class Demo extends CI_Controller {

    function __construct(){
        parent::__construct();
    }
    
    function getName(){
        $this->load->model('user');
        echo $this->user->getName();
    }

}

在ci中$this->load大部份都是用來載入東西的。
我不太否認其實ci用$this->load->view()來載入樣板是一件……有違和感的事就是了。
(所以我自己就改成用view(), 來處理樣板,其實也就只是寫個helper而已)

另外,通常就是會把資料庫的行為封裝在這個所謂的model裡面(雖然關於model這件事有很多眾說紛紜的意見,這邊我就不討論那些事了。)

另外因為我習慣會把database寫在autoload,所以就沒在model寫$this->load->database();

class User extends CI_Model {
    
    function getName(){
        $name = $this->input->post('name');
        $query = $this->db->where('name',$name)->get();
        return $query;
    }

}

你在controller就要這樣使用

class Demo extends CI_Controller {

    function __construct(){
        parent::__construct();
    }
    
    function getName(){
        $this->load->model('user');
        $query = $this->user->getName();
        print_r($query->reuslt_array());
    }

}
Zaku iT邦新手 5 級 ‧ 2017-06-16 16:30:19 檢舉

感謝大大,那大大都怎麼把參數送到model上去

參數嘛……
你會怎麼樣把參數傳到function去處理?

我要發表回答

立即登入回答