2012-04-28 55 views
0

我使用的Kohana 3.2,而不是它的問題很多,但我寫我在哪裏包裝的任何和所有在一個特定的類返回數據庫記錄的應用程序。我不知道我理解將數據庫行加載到類中的最佳方式,因爲它有時是一個ORM模型,有時它可能只是一個行ID。如何正確加載數據庫行成一個類在PHP

控制器:

$users = User::find_all(); 

用戶類別

public static function find_all() 
{ 
    $users_model = ORM::factory('user')->find_all(); 
    $users = array(); 
    foreach ($users_model as $user_model) 
    { 
     $users[] = User::instance($user_model); 
    } 
    return $users; 
} 

這工作不錯,但

從,如果我想所有這看起來像用戶的列表中選擇控制器

所以有時我需要一些動作後,加載用戶對象只有一個ID一樣,再一個例子:

控制器

$user_id = $_POST['user_id']; 
$user = User::instance($user_id); 

所以是User類負責試圖識別如果ID或ORM對象傳遞到它。看起來這對於良好的面向對象操作來說是不正確的,但我真的不確定要做到這一點的最佳方法是什麼。我一直在做的是在構建:

public function __construct($user, $load = 'model') 
{ 
    if ($load == 'model') 
    { 
     $this->user_model = $user; 
    } 
    if ($load == 'id') 
    { 
     $this->user_model = ORM::factory('user', $user); 
    } 

} 

但是,這真的只是感覺不對。任何建議將不勝感激。

+0

這個包裝是什麼原因?爲什麼不使用現有的Model_User類來滿足您的需求? – biakaveron 2012-04-28 19:35:01

回答

0

在你的控制器,使用ORM獲得基於ID的用戶。

$user_id = $_POST['user_id']; 
$user = ORM::factory('user', $user_id); 

或者因爲你已經有了一個發現都在你的用戶類,添加find_one()方法:

用戶類別

public static function find_one($user_id) 
{ 
    $user = ORM::factory('user', $user_id); 
    return $user; 
} 

控制器

$user_id = $_POST['user_id']; 
$user = User::find_one($user_id); 

見Kohana文檔。
http://kohanaframework.org/3.1/guide/orm/using#finding-an-object
http://kohanaframework.org/3.1/guide/orm/examples/simple

0

也許是這樣的:

public function __construct($user) 
{ 
    $this->user_model = is_object($user) ? $user : ORM::factory('user', (int)$user); 
} 
2

如果你已經有一個擴展的ORM,那麼你可能不需要在類的靜態方法來獲取所有用戶或得到用戶模型一個特定的用戶。

在你的控制器,你可以這樣做讓所有的用戶

$users = ORM::factory('user')->find_all(); 

要獲取單個用戶

$user = ORM::factory('user', $user_id); 

如果你還是想下去,你可以使用功能,如包裝路線所以

public static function all() { 
    $users = ORM::factory('user')->find_all(); 
    if (count($users)) { 
     return $users; 
    } 
    return false; 
} 

public static function get($user_id) { 
    $user = ORM::factory('user', $user_id); 
    if ($user->id) { 
     return $user; 
    } 
    return false; 
}