kohana ORM问题

时间:2011-02-20 09:30:11

标签: orm select kohana

我正在使用kohana ORM以便从数据库中获得一些结果。我的问题是:即使我已经查阅了文档,我也找不到只选择我感兴趣的列的方法。为了更明确,我有:

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

var转储它,它选择了我所有的“SELECT product_type。* from product_type where etc”。 但我想从salestock表中只选择'stock'字段。做find('stock')而不是find_all()返回一个weired对象...我哪里错了,我怎么能用kohana orm实际选择只有'stock'列呢?

谢谢你!

3 个答案:

答案 0 :(得分:5)

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');
  • 使用模型创建特殊方法 查询生成器:
// 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); 
}

答案 1 :(得分:0)

我意识到这并不是你想要的,但我从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通常会返回“非标准”对象。这可以防止使用原始对象混淆操作(即,如果对象只包含8个字段中的2个,还有另外一个模型中的某些字段,那么如何保存对象?)。

如果你打印了这个对象,并告诉我它的外观......它可能正是你想要的。

答案 2 :(得分:0)

我知道这是一个老问题,但我发现可能更容易解决方案:

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