2012-04-28 54 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; 
} 
相关问题