CodeIgniter Database 跟 Model 怎麼用?

其實最早在剛接觸 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 getbyname($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

tzangms

Read more posts by this author.

Subscribe to Oceanic / 海海人生

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!