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

时间:2011-12-30 12:19:52

标签: codeigniter

我正在尝试在Codeigniter上的模型中的两个函数中运行两个查询。第二个查询基于第一个查询的结果通过在函数之间传递变量来运行。

第一个查询根据用户访问的URL从“照片”数据库中获取行。对“用户”数据库运行第二个查询,并根据第一个查询行中的“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);
    }
}

1 个答案:

答案 0 :(得分:1)

您似乎有一个轻微的逻辑问题。你的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();
    }

    // ...
}