首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >codeigniter连接数据库表

codeigniter连接数据库表
EN

Stack Overflow用户
提问于 2018-05-28 18:27:47
回答 3查看 89关注 0票数 0

我有两个数据库表,一个用于帖子,另一个用于类别,每个帖子通过类别ID分配到一个类别。

我想要在帖子页面上显示类别名称,在每个帖子上我想要显示分配给它的类别,所以我做了一个连接数据库表,类别名称在主帖子页面上正常显示,但当我单击一个帖子时,类别现在正在显示,并且我得到一个Undefined index: name

型号代码:

代码语言:javascript
复制
<?php
  class Yacht_model extends CI_Model{
    public function __construct(){
      $this->load->database();
    }
    public function get_yachts($slug = FALSE){
      if ($slug === FALSE) {
        $this->db->join('categories', 'categories.cat_id = yachts.category');
        $query = $this->db->get('yachts');
        return $query->result_array();
      }
      $query = $this->db->get_where('yachts', array('slug' => $slug));
      return $query->row_array();
    }
    public function get_yachts_by_category($cat_id){
      $this->db->join('categories', 'categories.cat_id = yachts.category');
      $query = $this->db->get_where('yachts', array('category' => $cat_id));
      return $query->result_array();
    }
  }
 ?>

控制器代码:

代码语言:javascript
复制
<?php
  class Yachts extends CI_Controller{
    public function index(){
      $data['title'] = 'Yachts';
      $data['yachts'] = $this->yacht_model->get_yachts();

      $this->load->view('templates/header');
      $this->load->view('yachts/index', $data);
      $this->load->view('templates/footer');
    }
    public function view($slug = NULL){
      $data['yacht'] = $this->yacht_model->get_yachts($slug);
      if(empty($data['yacht'])){
        show_404();
      }
      $this->load->view('templates/header');
      $this->load->view('yachts/view', $data);
      $this->load->view('templates/footer');
    }
  }
 ?>

post的HTML代码:

代码语言:javascript
复制
<section>
    <div class="rows inner_banner inner_banner_2">
        <div class="container">
            <h2><span><?php echo $yacht['name']; ?></span></h2>
            <ul>
                <li><a href="#inner-page-title">Anasayfa</a>
                </li>
                <li><i class="fa fa-angle-right" aria-hidden="true"></i> </li>
                <li><a href="#inner-page-title" class="bread-acti">Gulet Kiralama</a>
                </li>
            </ul>
        </div>
    </div>
  </section>

$yacht['name'];来自categories表,它应该显示类别名称。

我不确定我是否足够清楚地解释我的问题,如果不是,请告诉我,我可以提供你需要的任何信息或细节。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-28 23:32:34

我找到了解决方案,我在if语句中创建连接表,默认情况下设置为FALSE,这就是为什么在post页面内连接不起作用,但当我将它放在if语句之外时,它工作得很好

之前:

代码语言:javascript
复制
public function get_yachts($slug = FALSE){
      if ($slug === FALSE) {
        $this->db->join('categories', 'categories.cat_id = yachts.category');
        $query = $this->db->get('yachts');
        return $query->result_array();
      }
      $query = $this->db->get_where('yachts', array('slug' => $slug));
      return $query->row_array();
    }

之后:

代码语言:javascript
复制
public function get_yachts($slug = FALSE){
      if ($slug === FALSE) {
        $this->db->join('categories', 'categories.cat_id = yachts.category');
        $query = $this->db->get('yachts');
        return $query->result_array();
      }
$this->db->join('categories', 'categories.cat_id = yachts.category');
      $query = $this->db->get_where('yachts', array('slug' => $slug));
      return $query->row_array();
    }
票数 0
EN

Stack Overflow用户

发布于 2018-05-28 18:44:17

1)您需要使用post_id从数据库中获取该类别名称。

2)您可以将类别和帖子名称映射数组存储在会话中,还可以从会话数据中显示相关帖子的类别名称。

票数 0
EN

Stack Overflow用户

发布于 2018-05-28 19:02:02

如果您有post和category表,您可以通过使用连接或创建一个函数来访问它,该函数通过传递category id返回类别名称,让我向您展示这两者

首先,在您的帖子模式中使用using创建此函数

代码语言:javascript
复制
   function getPosts(){
                   $this->db->select('post.*,post_category.*')
                        ->from('post')
                        ->join('post_category','post_category.id=post.post_category','left');
                $query = $this->db->get();
                return $query->result_array();
     }

类别中的第二个方法Model write函数

代码语言:javascript
复制
public function getCategoryById($id = Null){
        $query = $this->db->get_where('post_category',array('id'=>$id));;
        return $query->row()->category_title;
    }

如果您使用的是第一种方法,那么视图文件中的代码将类似于

代码语言:javascript
复制
<?php if(isset($posts) && count($posts) > 0){ 
        foreach($posts as $k => $val){
  ?>
<tr>
    <td><?php echo $k++?></td>
    <td><?php echo $val['post_title']?></td>
    <td><?php echo $val['post_content']?></td>
    <td><?php echo $val['category_title']?></td>
    <td><?php echo $val['slug']?></td>
</tr>
<?php } } ?>

如果要使用第二种方法,视图中的代码将如下所示

代码语言:javascript
复制
 <?php if(isset($posts) && count($posts) > 0){ 
        foreach($posts as $k => $val){
  ?>
<tr>
    <td><?php echo $k++?></td>
    <td><?php echo $val['post_title']?></td>
    <td><?php echo $val['post_content']?></td>
    <td><?php echo $this->category_model->getCategoryById($val['post_category'])?></td>
    <td><?php echo $val['slug']?></td>
</tr>
<?php } } ?>

我希望它能帮助你

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50564280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档