2013-07-25 7 views
0

Проблема noob: Мне нужно выбрать определенные идентификаторы из запроса БД под названием user_id. мой результат из БД :: выбрать это:Что такое лучший способ изменить идентификаторы пользователей в объекте kohana ORM

$query=DB::select... 
$ids=$query->as_object()-execute(); 
$players=ORM::factory('User'->select()->where('id', 'in', array($this->to_array($ids))); 

и метод to_array:

private function to_array($obj) 
{ 
    $arr=array(); 
    foreach($obj as $o) 
    { 
     array_push($arr, $o->user_id); 
    } 
    return $arr; 
} 

является лучшим решением в Kohana 3.3 ОРМ создать контейнер пользователя из указанных идентификаторов?

ответ

0

Там нет необходимости иметь отдельные запросы, как ОРМ расширяет класс базы данных:

$users = ORM::factory('User') 
    ->where('your_filter', '=', $whatever_value) 
    ->find_all(); 

Кроме того, Database_Result поставляется со своей собственной функцией «to_array»: as_array например

// Will generate an array with e.g. array(15 => 'Peter', 27 => 'Meg'); 
$users->as_array('id', 'name'); 

// Will generate a 'standard' array with e.g. array(0 => 'Peter', 1 => 'Meg') 
$users->as_array(NULL, 'name'); 

// Will convert the results into an array e.g. array(0 => Model_User, 2 => Model_User) 
$users->as_array(); 

Так что если по какой-то причине вам действительно нужно использовать массив идентификаторов из результирующем:

$users = ORM::factory('User') 
    ->where('id', 'IN', $results->as_array('id', 'id')) 
    ->find_all(); 

Это действительно окупается изучать ОРМ немного, прежде чем строить вещи, просто проверяя пользователя гида недостаточно; посмотрите на api browser

+0

ну, это не совсем ответ на мой вопрос, потому что я не могу генерировать пользователей как массив, как в вашем примере, но спасибо за помощь. Я построил разницу querie. – strz

+0

Что значит «Я не могу генерировать пользователей как массив, как в вашем примере»? – AmazingDreams

+0

Я обновил ответ (см. Третий пример 'as_array'), чтобы« возможно »покрыл ваш вопрос – AmazingDreams