我正在构建一个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;
}