0

在我的一个控制器中为我的一般视图页面获取所有数据,我使用了一个 foreach 循环,$object->column_name但现在我决定我想用这些数据做几件事:

  • 编辑它 -> 它是每个的编辑$object页面$id
  • 通过控制器使用该$object->name字段使我能够在$data['pageTitle']= Edit '.$object->name.';

更改以下模型的最佳方法是什么,以便我可以将其用于多种目的/显示数据以进行操作的不同方式?

public function showAll()
{

    $database = $this->db->get('form');

    if($database->num_rows() > 0)
    {
        $row = $database->result();
    }

    return $row;
}
4

2 回答 2

1

将数据库查询部分保留在模型中而不是控制器中是一种很好的做法。

在您的控制器中,您可以执行以下操作:

$recs = $this->sample_model->model_function();
foreach ($recs as $r)
{
    $r->additional_info_appended_to_each_row = 'whatever';
} 

通过这种方式,您可以将附加变量附加到每个数据库行以进行显示/编辑等。

于 2012-08-10T12:11:57.747 回答
0

该代码并没有真正向我们展示足够的相关代码来回答这个问题。假设$database->result()返回一个行数组(数据库查询的结果集),那么它包含的数据取决于查询的外观。你所展示的只是$this->db->get('form'),这几乎可以意味着任何事情。

您的问题的一般答案是:更改 SQL 查询以包含 id 和 name 字段。然后通过控制器将它们注入到您的视图中。(或者直接让他们通过视图。这取决于你。)

对控制器或视图一无所知,这是一个假设您的视图扩展 Smarty 模板引擎的示例。

public function GeneralController
{
    public function defaultAction()
    {
        $model = new GeneralModel();
        $objects = $model->getAll();

        $view = new GeneralView();
        $view->assign("objects", $objects);
        $view->show();
    }
}

Smarty 模板会在生成 HTML 时使用这些行

{foreach $objects as $object}
<section class="object">
    <header>
        <h1>{$object->name}</h1>
    </header>
    <p>{$object->contents}</p>
    <footer>
        <a href="/general/edit/?id={$object->id}">Edit</a>
    </footer>
</section>
{/foreach}   
于 2012-08-10T08:07:05.090 回答