объединение таблиц базы данных codeigniter - PullRequest
0 голосов
/ 28 мая 2018

У меня есть 2 таблицы базы данных, одна для сообщений, а другая для категорий, и каждому сообщению присваивается категория по идентификатору категории.

Я хочу показать название категории на странице сообщений ив каждом сообщении я хочу показать назначенную ему категорию, поэтому я сделал таблицы объединяемой базы данных, имя категории обычно отображается на главной странице сообщений, но когда я нажимаю на сообщение, категория теперь отображается, и я получаюUndefined index: name

Код модели:

<?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();
    }
  }
 ?>

Код контроллера:

<?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');
    }
  }
 ?>

HTML-код для сообщения:

<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']; из таблицы категорий, в ней должно быть указано название категории.

Я не уверен, достаточно ли ясно я объяснил свою проблему, если нет, скажите, пожалуйста, и я могу предоставить вам любую информацию или детали, которые вам нужны.

Ответы [ 4 ]

0 голосов
/ 28 мая 2018

Я нашел решение, я создавал таблицы соединений внутри оператора if, который по умолчанию установлен в FALSE, поэтому соединение внутри страницы публикации не работает, но когда я размещаю его вне оператора if, оно работаетштраф

до:

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($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 голосов
/ 28 мая 2018

если у вас есть таблица записей и категорий, вы можете получить к ней доступ, используя присоединение или создав функцию, которая возвращает имя категории путем передачи идентификатора категории, позвольте мне показать вам оба

1-й, используя присоединение к модалу сообщения.создайте эту функцию

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

2-й метод в вашей категории Функция записи модели

public function getCategoryById($id = Null){
        $query = $this->db->get_where('post_category',array('id'=>$id));;
        return $query->row()->category_title;
    }

Если вы используете первый метод, тогда код в вашем файле вида будет выглядеть примерно так:

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

Если вы хотите использовать 2-й метод, код, по вашему мнению, будет выглядеть примерно так:

 <?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 голосов
/ 28 мая 2018

Вы можете попробовать этот простой запрос.Я надеюсь, что это будет работать, как вы хотите.

$getData=$this->db->query("SELECT table1.*, table2.* FROM table1 JOIN table2 ON table1.id=table2.id and table1.id='1'");
$result=$getData->result_array();

echo '<pre>';
print_r($result);
0 голосов
/ 28 мая 2018

1) вам нужно получить это имя категории из базы данных, используя post_id.

Или

2) вы можете сохранить эти категории и массив сопоставления имен сообщений в сеансе, а также показать имя категории для соответствующего сообщения из данных сеанса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...