On twitter

RT @flaneur_tw: 愛情甚至創造了現代的靈魂概念──如果沒有愛情,心靈就會覺得空虛,拒絕愛情不僅是異端邪說,更是人生悲劇,因為就現代人而言,這代表沒有展現最基本的人性,不單是悲慘,簡直就是不正常。──《反對愛情》p.33

follow me on twitter

CodeIgniter Database 跟 Model 怎麼用? 4

其實最早在剛接觸 CodeIgniter 的時候記得是版本 1.5.2, 那時候 Model 都這麼寫, 例如下面的 User_Model。

class User_model extends Model {
    function __construct() {
        parent::__construct();
    }

    function get_by_name($name) {
        $this->db->where('name', $name);
        $query = $this->db->get('users');
        if ($query->num_rows()) {
            return $query->row();
        }

        return false;
    }

    function get_all() {
        $query = $this->db->get('users');
        if ($query->num_rows()) {
            return $query->result();
        }

        return array();
    }
}


當時每次都要判斷有沒有一筆以上的資料, 才能在進行取得 row 或是 result, 如果沒有則是回 false 或是 array()。

後來我在寫 Model 的 method 時, 都依照上面的方式在寫, 不過寫久真的是會很煩, 每次都要先檢查 num_rows(), 否則直接取得 row 或 result 則會有 notice 等錯誤。 難道 CodeIgniter 不能在沒有任何資料筆數時, 在我用 result() 時回給我空的 array, 在當我 row() 時, 回給我 false 嗎?

anyway, 前一陣子用 1.6.2 試了一下, 好像這個問題解決了。於是可以這麼寫 (在PHP5上可以用 chain method)

class User_model extends Model {
    function __construct() {
        parent::__construct();
    }

    function get_by_name($name) {
        return $this->db->where('name', $name)->get('users')->row();
    }

    function get_all() {
        return $this->db->get('users')->result();
    }
}

或是像這樣, 可以直接取得 user 的資料
$this->db->where('id', $id)->get('user')->row()->name;

就是說, 現在即使不用檢查 num_rows(), 直接取得 row 跟 result 也不會有 notice, 加上 PHP5 的 chain method 整個簡化寫 Model 的流程, 當然有 ORM 的話還是會比較快… XD

September 18th, 2008 CodeIgniter Tags: , ,

4 Responses to “CodeIgniter Database 跟 Model 怎麼用?”

  1. Jason says:

    關於 ORM 的功能,
    請參考
    http://stensi.com/datamapper/index.html

  2. tzangms says:

    @Jason
    酷! 之前找 ORM 沒找到這個~ 感謝 :D

  3. kfrico says:

    可以問你一個JOIN的問題嗎
    為什麼都出現
    Fatal error: Call to a member function result() on a non-object in

    可以點這個網址看我的程式碼
    http://codeigniter.org.cn/forums/thread-1219-1-1.html

  4. tzangms says:

    @kfrico
    你用哪個版本的 CI ?

    你要不要先用 num_rows 看看有沒有紀錄?

    記得沒錯的話, 沒有一筆以上的紀錄, 就沒有 object, 沒有 object 就不會有 result 函式可用。

Leave a Reply

Partners of Oceanic / 人生海海

jiwo sca wellmeet