Codeigniter - 根据一个字段选择数据库行

时间:2015-02-13 23:32:19

标签: php codeigniter

我正在构建一个codeigniter网站,我有一个书籍数据库表 - 每本书的一个记录,包括标题,作者等等。我知道如何获取db表内容并将对象传递给视图,然后执行foreach循环以获取值。我可以打印一张包含所有数据的表格。然而,我有点混乱。页面包含每本书的区域,书籍的数据将是数据阵列的一行。所以我想要做的是,如果作者是'this'值,找到作者出现的正确行,然后获取其他字段。如何使用作者姓名找到一行的foreach循环? 我想不出怎么做 - 我似乎围成一圈又一圈。 救命啊!

编辑:代码:

好的,这是控制器方法:

public function index()
{
    $books = $this->Books_model->getbooks();
    $data = array(
    'body_id'=>'home',
    'main'=>'home_view',
    'books'=>$books
    );
    $this->load->view('templates/template_main_view', $data);
}

这是模型方法:

function getbooks(){
    $query = $this->db->get('books');
    return $query->result();
}

所以我最终得到了视图中的变量$books(当然是一个对象,而不是一个数组),而var_dump()表明它拥有所有数据。到现在为止还挺好。然后我可以使用foreach循环来获取值。

现在我想提取单行/记录,条件是它具有'author'的给定值,并将该行的每个字段分配给我可以在视图中使用它们的变量。然后我想重复其他行。我似乎无法弄清楚如何做到这一点。

所感:

我找到了一种方法,但不确定它是最好的还是最好的:

我这样做:

if(isset($books)){
    foreach($books as $row){
        if($row->author == 'authorname'){
            $title = $row->title;   
         }
    }
}

它有效,但看起来有点笨拙/矫枉过正?

1 个答案:

答案 0 :(得分:0)

如何创建一个特定的函数来获取与作者姓名相匹配的书?

例如:

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

public function index()
{
    $data['books'] = $this->Books_model->get_each_book();
    $data = array(
    'body_id'=>'home',
    'main'=>'home_view',
    'books'=>$books
    );
    $this->load->view('templates/template_main_view', $data);
}

在您的模型中,执行以下操作:

function get_each_book(){
    $this->db->where('author','authorname');
    $query = $this->db->get('books');
    return $query->result_array();
}

这样,您将在模型中过滤结果。

然后在您的视图中,通过foreach循环访问变量'books':

示例:

foreach($books as $row)
{
    $title = $row['title'];
    echo $title;
}