2011-12-30 15 views
0

Codeigniterのモデルで2つの関数で2つのクエリを実行しようとしています。 2番目のクエリは、関数間で変数を渡すことによって最初のクエリの結果に基づいて実行されます。Codeigniterの2番目の関数にクエリ結果を渡す

最初のクエリは、ユーザーが行くURLに基​​づいて '写真'データベースから行を取得します。 2番目のクエリは '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

あなたはわずかなロジックの問題を持っているようです。あなたの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(); 
    } 

    // ... 
} 
+0

働い!大変な土地ありがとう!私は2日間のようにそれを理解しようとしています...いつものように簡単な解決策! –

+0

私はちょうどCSSのクラスが適用されなかった理由を理解するために20分を費やしましたが、私はCSSファイルでスペルミスしていることを認識しました。 2日ではありませんが、私はあなたの痛みを感じます。ハッピーコーディング! – landons

関連する問題