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


Codeigniter - selecting a database row based on one field

我正在构建一个codeigniter站点,我有一个图书数据库表——每本书都有一个记录,其中包含标题、作者等字段。我知道如何获取数据库表内容并将对象传递给视图,然后执行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;   
         }
    }
}

它有效,但看起来有点笨拙/太夸张了??

创建一个特定的函数来获取与作者姓名匹配的图书怎么样?

例如:

在你的控制器中,你可以这样做:

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;
}