Kohana ORM вопрос - PullRequest
       29

Kohana ORM вопрос

5 голосов
/ 20 февраля 2011

Я использую Kohana ORM для получения некоторых результатов из базы данных. Моя проблема: хотя я ознакомился с документацией, я не могу найти способ выбрать только интересующий меня столбец. Чтобы быть более точным, у меня есть:

$sale_stock = Model::factory('product_type')
->where('product_type_id','=', $id )
-> find_all();

var сбрасывает его, он выбирает мне все "SELECT product_type. * From product_type, где etc". Но я хочу выбрать только поле «сток» из таблицы продаж. выполнение find ('stock') вместо этого find_all () возвращает устаревший объект ... Где я неправ, и как я могу на самом деле выбрать только столбец 'stock', используя kohana orm?

спасибо!

Ответы [ 3 ]

5 голосов
/ 20 февраля 2011

Методы ORM find() и find_all() всегда выбирают все столбцы таблицы, поэтому есть два способа получить указанные поля:

  • Загрузить полные строки таблицы и получить из нее столбцы:
$sale_stock = Model::factory('product_type')
   ->where('product_type_id','=', $id )
   -> find_all();
// get array of id=>stock values
$columns = $sale_stock->as_array('id', 'stock');
  • Создание специального метода в модели с помощью Query Builder:
// model Model_Product_Type 
public function get_stocks($product_type_id) 
{    
   return DB::select(array('stock'))
      ->from($this->_table_name)
      ->where('product_type_id', '=', $product_type_id)
      ->execute($this->_db); 
}
0 голосов
/ 02 июня 2015

Я знаю, что это старый вопрос, но я нашел, возможно, более простое решение:

$sale_stock = ORM::factory('product_type')
   ->where( 'product_type_id','=', $id )
   ->find_all();
die($sale_stock->stock);
0 голосов
/ 20 февраля 2011

Я понимаю, что это не совсем то, что вы ищете, но я извлек следующее из документации по Kohana ...

$articles = ORM::factory('article')->select_list('id', 'title');

foreach ($articles as $id => $title)
{
    // Display a list of links
    echo html::anchor('articles/'.$id, $title);
}

// Display a dropdown list
echo form::dropdown('articles', $articles);

Вы можете думать об этом как о скидке, два поля по цене одного.

Обычно ORM возвращает «нестандартный» объект, когда запрашиваются поля частичной модели или объединенной модели. Это позволяет избежать путаницы при использовании исходного объекта (т. Е. Как сохранить объект, если он содержит только 2 из 8 полей, а также, возможно, некоторые поля другой модели?).

Если вы напечатаете объект и дадите мне представление о том, как он выглядит ... это может быть именно то, что вы хотите.

...