【问题标题】:A controller problem using a base CRUD model使用基本 CRUD 模型的控制器问题
【发布时间】:2010-03-20 18:51:49
【问题描述】:

在 CodeIgniter 中,我使用的是 base CRUD My_model,但我的浏览控制器中有这个小问题。我的 $data['posts'] 从名为“posts”的表中获取所有帖子。虽然该表中的作者只是一个 user_id,但这就是为什么我需要使用我的“getusername”函数(从 ID 获取用户名)从 users 表中获取用户名。

虽然我不知道如何从这里开始,因为它不仅仅是一篇文章。因此,我需要用户名成为 $data['posts'] 数组或其他一些智能解决方案的一部分。

谁能帮帮我?

 function index() {
  $this->load->model('browse_model');

  $data['posts'] = $this->browse_model->get_all();
  $data['user'] = $this->browse_model->getusername(XX);

  $this->load->view('header');
  $this->load->view('browse/index', $data);
  $this->load->view('footer');
 }

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    您最好的办法是在获取帖子时通过加入帖子表上的用户表来获取关联的用户名。这样,您只执行一个数据库查询。您可以覆盖基本 My_model 的 get_all 函数。

    function get_all()
    {
        $sql = 'SELECT p.*, u.username
                FROM posts p
                JOIN users u ON u.user_id=p.user_id';
    
        $query = $this->db->query($sql);
        return $query->result();       
    }
    

    每个返回的帖子对象都会有一个用户名属性。

    $posts = $this->browse_model->get_all();
    foreach ($posts as $post)
    {
        echo $post->username;
    }
    

    【讨论】:

    • 你是救生员! :) 不知道这个 JOIN 事情。所以你让我的开发变得更容易了!
    【解决方案2】:

    做同样事情的另一种方法:

    function get_all()
    {
       $this->db
           ->select('posts.*, u.username')
           ->join('users u', 'u.user_id=posts.user_id');
    
       return parent::get_all();
    }
    

    【讨论】:

    • /me 也为你设置了模式 +lifesaver,Phil ;) 谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多