Передача результата запроса во 2-ю функцию в Codeigniter - PullRequest
0 голосов
/ 30 декабря 2011

Я пытаюсь выполнить два запроса в двух функциях в модели на Codeigniter.Второй запрос выполняется на основе результата первого, передавая переменную между функциями.

Первый запрос получает строку из базы данных 'photos' на основе URL-адреса, на который переходит пользователь.Второй запрос выполняется к базе данных '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);
    }
}

1 Ответ

1 голос
/ 30 декабря 2011

Кажется, у вас небольшая логическая проблема. Ваша функция get_photo () должна возвращать объект 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();
    }

    // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...