【问题标题】:Kohana parameterised execution of query within viewKohana 在视图内参数化执行查询
【发布时间】:2012-10-10 00:02:16
【问题描述】:

我只是想了解一下 Kohana,所以如果我想错了,请告诉我!

我想在我的输出中对结果进行分组。我在 vanilla-PHP / PDO 中这样做的方式是准备一个查询,然后在输出结果中执行它。不过,我无法在 Kohana (3.2.2) 中到达那里。

在这种情况下,在我的“术语”页面上,我想按“类型”对“术语”进行分组,每组术语由“类型”标题分隔。

我的“条款”控制器是(简化的):

class Controller_Terms extends Controller {

  public function action_index() 
  {
    $view = View::factory('terms');

    // types of term - for grouping terms together
    $sql = 'SELECT DISTINCT Type 
            FROM Term';
    $view->types = DB::query(Database::SELECT, $sql)->as_object()->execute();

    // list of terms - executed separately for each type
    $sql = 'SELECT TermId, Term
            FROM Term
            WHERE Type = :type';
    $view->terms = DB::query(Database::SELECT, $sql)->as_object();

    $this->response->body($view);
  }

}

“条款”视图包括(简化):

<? foreach ($types as $type): ?>
<h2><?= $type->Type ?></h2>
<? $params = array(':type' => $type->Type);
   $terms->parameters($params)->execute(); 
   foreach ($terms as $term): ?>
    <a href="term/<?= $term->TermId ?>"><?= $term->Term ?></a>
<? endforeach // term ?>
<? endforeach // type ?>

我得到了“类型”标题,但我没有得到每种类型中的任何术语。

任何建议表示赞赏!

【问题讨论】:

    标签: database model-view-controller kohana prepared-statement


    【解决方案1】:

    execute()returns 一个特殊的对象 (Database_Result),所以你需要这样的东西:

    $items = $terms->parameters($params)->execute(); 
    foreach ($items as $term): ?>
    ...
    

    【讨论】:

    • 我认为您不应该从视图中执行查询。视图用于表示逻辑,而不是用于业务逻辑。此外,您可以将foreach 替换为一个查询(select * from term where type in ... order by type)。
    猜你喜欢
    • 1970-01-01
    • 2010-11-15
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    • 2021-08-30
    • 2011-02-06
    相关资源
    最近更新 更多