Соединить столбец из одной таблицы в другой столбец в другой таблице CodeIgniter - PullRequest
4 голосов
/ 03 июля 2019

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

Вот мой сценарий: реестры пользователей и их данные переходят в таблицу «пользователи». Зарегистрированный пользователь теперь может оставлять сообщения. Когда он делает сообщение, его сообщение отправляется в таблицу «сообщений».

Теперь я хочу отображать "имя пользователя" пользователя, когда он / она делает сообщение.

Итак, вывод заключается в том, что я хочу, чтобы столбец «имя пользователя» из таблицы «пользователи» автоматически синхронизировался со столбцом «имя пользователя» из таблицы «сообщения». Так что, как только пользователь делает сообщение, он увидит, что конкретный пользователь сделал сообщение.

Вот как я это сделаю

<?php foreach ($posts as $post) : ?>

    <div class="row">
        <div  class="col-md-3">
            <img class="post-thumb img-fluid" src="<?php echo site_url(); 
?>assets/images/posts/<?php echo $post['post_image']; ?>">
        </div>
        <div class="col-md-9">
            <h3><?php echo $post['title'];?></h3>
            <small class="post-date">Posted on: <?php echo 
$post['created_at']; ?>
                in <strong><?php echo $post['category_name']?></strong> by 
<strong><?php echo $post['username']?></strong></small><br>
            <?php echo word_limiter($post['body'], 50); ?>
            <br><br>
            <p><a class="btn btn-info" href="<?php echo 
site_url('/posts/'.$post['slug']);?>"
                >Read More</a></p>
        </div>
    </div>

<?php endforeach; ?>

Вот функция, которую я попробовал, но она не обновляет мой столбец "posts" в таблице "username", когда я создаю сообщение.

public function get_posts($slug = FALSE){
    if ($slug === FALSE){
        $this->db->order_by('posts.id', 'DESC');
        $this->db->join('categories', 'categories.id = 
posts.category_id');
        $this->db->join('users', 'users.username = posts.username');
        $query = $this->db->get('posts');
        return $query->result_array();
    }

    $query = $this->db->get_where('posts', array('slug' => $slug));
    return $query->row_array();
    }

Вот таблицы БД

CREATE TABLE `posts` (
  `id` int(11) NOT NULL,
  `category_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `username` varchar(255) NOT NULL,
  `posted_by` varchar(255) NOT NULL,
  `title` varchar(255) NOT NULL,
  `slug` varchar(255) NOT NULL,
  `body` text NOT NULL,
  `post_image` varchar(255) NOT NULL,
  `created_at` datetime NOT NULL DEFAULT current_timestamp()
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `username` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `register_date` timestamp NOT NULL DEFAULT current_timestamp()
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Нет ошибки, просто нет результата.

Любой совет или помощь будут оценены.

EDIT:

Мне удалось создать функцию "get_username". Но я не уверен, почему это не работает, и как создать цикл для циклического просмотра постов, которые были сделаны. Пожалуйста, смотрите код ниже

public function get_username(){
    $username = $this->db->query("
          SELECT u.username AS username
          FROM users u
          LEFT JOIN posts p 
          ON u.id = p.user_id
          WHERE p.id = ?"
        , array('id')
    )->row_array();
    return $username['username'];
 }

Я получаю сообщение об ошибке:

A PHP Error was encountered
Severity: Notice

Message: Undefined index: username

Filename: posts/index.php

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