2012-03-30 14 views
0

投稿を表示するページがあり、各投稿の横に作成者の名前が表示されます。 (カラムはID著者と呼ばれて)と著者のための1つ(列と呼ばタイトル著者付き)ページ用のDBテーブルがあります。Codeigniter:ビュー内のループ内でクエリを実行しようとしています

コントロール

function pages() { 
    // QUERIES 
    $pages_query = $this->db->get('table_pages'); 
    $authors_query = $this->db->get_where('table_authors', array('id =' => $row->author)); 

    // DATA 
    $data['pages'] = $pages_query; 
    $data['authors'] = $authors_query; 

    // CREATE 
    $this->load->view('admin_pages', $data); 
} 

ビュー

<? foreach ($pages->result() as $row): ?> 
     Title: <?=$row->title?>, by <?=$authors['id']?><br /> 
    <? endforeach; ?> 

私は私の問題は、コントロールのIDに基づいて、著者の呼び出しであると思いますが、私はちょうどそれを把握するように見えることはできません。

+0

、table_pagesにおけるTHER AUTHOR_ID列がありますか? – safarov

答えて

1

基本的に、あなたは直接著者名にアクセスすることができますので、あなたはそのために2つのクエリを使用する必要はありません、2つのテーブルをJOINしたい...

あなたが好きな何かをしたい:

function pages() { 
    // QUERIES 
    $this->db->join('table_authors', 'table_pages.table_authors_id = table_authors.id'); 
    $pages_query = $this->db->get('table_pages'); 

    // DATA 
    $data['pages'] = $pages_query; 

    // CREATE 
    $this->load->view('admin_pages', $data); 
} 

ビュー

<? foreach ($pages->result() as $row): ?> 
    Title: <?=$row->title?>, by <?=$row->table_authors_name?><br /> 
<? endforeach; ?> 

あなたは私はあなたのデータベース構造を知らないように、いくつかの列名を調整する必要があります。 table_pagesとtable_authorsの両方にnameまたはtitleフィールドが含まれている場合は、クエリの列の名前を変更する必要があります。あなたは、あなただけの、クエリを記述データを取得し、ビューの読み込み機能に渡し、非常に単純な方法でこれを行うことができます

$this->db->select('table_authors.title AS author_name, ...');

+0

ありがとうございます。これは私のために働いた。 JOIN Active Record Classは、CIサイトに関する非常に良い文書を持っておらず、私はインラインクエリを練習として使うことを避けようとしています。 – Tiny

+0

のActive Recordクラスは、SQLクエリを記述するためのラッパーのセット以外の何ものでもありません。 Active Recordを使って何かを行う方法が不明な場合は、純粋なSQLでそれを行う方法を考えてみてください。 (私の)SQLの理解を深めると、多くのことに役立ちます! – Bram

0

を使用してこれを行うことができます。私はあなたがテーブルを結合が必要だと思う

For controller you can write like this 

     function pages() { 

    $pages_query = $this->db->query("SELECT * FROM table_authors as a INNER JOIN table_pages as p ON a.id=p.table_authors_id"); 

    // DATA 
    $data['pages'] = $pages_query->result_array(); 


    // CREATE 
    $this->load->view('admin_pages', $data); // Passing the data to the view loading function. 
    } 


For Views You can write like this. 

    <?php 
    foreach($pages as $page): 
    echo "Title: ".$page['title'].", by ".$page['table_authors_id']; 
    endforeach; 
    ?> 
関連する問題