Codeigniter 3: внутреннее объединение приводит к неоднозначному имени переменной, которое будет использоваться в представлении - PullRequest
0 голосов
/ 04 ноября 2018

Я работаю над базовым приложением блога в Codeigniter 3.1.8 и Bootstrap 4.

Есть несколько таблиц, среди которых posts и categories, в которых хранятся категории сообщений.

Каждый пост относится к категории:

Every post belongs in a category

Названия категорий:

enter image description here

Я хочу отображать сообщения с названием категории, к которой относится каждое сообщение. Для этой цели в моей модели постов у меня есть текущий код:

public function get_posts($limit, $offset) {
    $this->db->order_by('posts.id', 'DESC');
    $this->db->join('categories', 'posts.cat_id = categories.id', 'inner');
    $query = $this->db->get('posts', $limit, $offset);
    return $query->result();
}

Код выше "переводит" в

`SELECT * FROM `posts` INNER JOIN `categories` ON `posts`.`cat_id` = `categories`.`id` ORDER BY `id` DESC LIMIT 12`

и, если я сделаю print_r($data['posts']), он неоднозначно возвращает название категории сообщения как [name] => Showbiz.

Это заставляет меня использовать эту неоднозначную строку в представлении сообщений:

<p><?php echo $post->name; ?></p>

Я хочу использовать эту строку вместо:

<p><?php echo $post->post_category; ?></p>

Другими словами, я хочу это, но с синтаксисом Codeigniter 3:

`SELECT *, categories.`name` as post_category FROM `posts` INNER JOIN `categories` ON `posts`.`cat_id` = `categories`.`id` ORDER BY `id` DESC LIMIT 12`;

и все еще в состоянии использовать функцию ORM Codeigniter.

Примечание: в контроллере у меня есть:

$data['posts'] = $this->Posts_model->get_posts($config['limit'], $config['offset']);

Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Присоедините select и используйте псевдоним as для оператора имени столбца категории, как показано ниже. Итак, теперь вы сможете echo $post->post_category;

<?php 

public function get_posts($limit, $offset) {
    $this->db->select('posts.*,categories.name as post_category');
    $this->db->order_by('posts.id', 'DESC');
    $this->db->join('categories', 'posts.cat_id = categories.id', 'inner');
    $query = $this->db->get('posts', $limit, $offset);
    return $query->result();
}
0 голосов
/ 04 ноября 2018
$this->db->select('posts.*, categories.*');
$this->db->from('posts');
$this->db->join('categories','posts.cat_id= categories.id','INNER');
$this->db->where('posts.id',2);
$res = $this->db->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...