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




關於 ORM 的功能,
請參考
http://stensi.com/datamapper/index.html
@Jason
酷! 之前找 ORM 沒找到這個~ 感謝 :D
可以問你一個JOIN的問題嗎
為什麼都出現
Fatal error: Call to a member function result() on a non-object in
可以點這個網址看我的程式碼
http://codeigniter.org.cn/forums/thread-1219-1-1.html
@kfrico
你用哪個版本的 CI ?
你要不要先用 num_rows 看看有沒有紀錄?
記得沒錯的話, 沒有一筆以上的紀錄, 就沒有 object, 沒有 object 就不會有 result 函式可用。