将查询结果传递给Codeigniter中的第二个函数



我试图在Codeigniter模型的两个函数中运行两个查询。第二个查询基于第一个查询的结果运行,在两个函数之间传递变量。

第一个查询根据用户访问的URL从'photos'数据库获取行。第二个查询对'users'数据库运行,并根据第一个查询行的'userid'字段选择行。

我需要能够从两个查询的行中获得所有数据。我得到一个404错误的时刻,任何想法,如何得到它的工作?

代码如下:

模型:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Viewphoto_model extends CI_Model {

    public function get_photo($id)
    {
        $db_photos = $this->load->database('photos', TRUE);
        $db_photos->select('*');
        $db_photos->select("DATE_FORMAT(uploaddate, '%d/%m/%y') as uploaddate_formatted", FALSE);
        $db_photos->from('photos');
        $db_photos->where('approved', '1');
        $db_photos->where('id', $id);
        $result = $db_photos->get()->row();
        $userid = $this->get_user($result->userid);
    }
    public function get_user($userid)
    {
        $db_users = $this->load->database('users', TRUE);
        $db_users->select('firstname, lastname, email');
        $db_users->from('useraccounts');
        $db_users->where('id', $userid);
        $query = $db_users->get();
        return $query->row();
    }

}

控制器:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Viewphoto extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
        $this->load->model('viewphoto_model');
    }

    public function view($id)
    {
        $data['photo'] = $this->viewphoto_model->get_photo($id);
        if (empty($data['photo']))
        {
        show_404();
        }
        $data['user'] = $this->viewphoto_model->get_user($userid);
        if (empty($data['user']))
        {
        show_404();
        }
        $data['title'] = $data['photo']->title.' by '.$data['photo']->username;
        $data['meta_description'] = $data['photo']->description;
        $data['directory'] = 'sub';

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

你似乎有点逻辑问题。get_photo()函数应该返回照片对象,然后控制器可以在调用get_user()时使用该对象…

public function get_photo($id)
{
    $db_photos = $this->load->database('photos', TRUE);
    $db_photos->select('*');
    $db_photos->select("DATE_FORMAT(uploaddate, '%d/%m/%y') as uploaddate_formatted", FALSE);
    $db_photos->from('photos');
    $db_photos->where('approved', '1');
    $db_photos->where('id', $id);
    return $db_photos->get()->row();
}

然后在你的控制器....

public function view($id)
{
    $data['photo'] = $this->viewphoto_model->get_photo($id);
    if (empty($data['photo']))
    {
    show_404();
    }
    // Pass the photo's userid here
    $data['user'] = $this->viewphoto_model->get_user($data['photo']->userid);
    if (empty($data['user']))
    {
    show_404();
    }
    // ...
}

最新更新