Codeigniter 3:内部联接导致模棱两可的变量名称在视图中使用

时间:2018-11-04 13:29:11

标签: php codeigniter

我正在使用Codeigniter 3.1.8和Bootstrap 4中的基本博客应用

有几个表,其中postscategories用于存储帖子类别。

每个帖子都属于一个类别:

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`;

并且仍然能够使用Codeigniter的ORM功能。

注意:在控制器中,我有:

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

我想念什么?

2 个答案:

答案 0 :(得分:0)

2.

答案 1 :(得分:0)

附加一个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();
}