我正在构建一个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;
}
}
}
它有效,但看起来有点笨拙/矫枉过正?
答案 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;
}