2017-10-27 4 views
0

の作品次のコードをフィールドを抽出することができません。私は、このレコードから使用するフィールドの一つは、「名前」ですが、ビューのページにアクセスするには、私が返されたレコードから「名前」フィールドを抽出するために2行のコードを配置する必要があります。私はコントローラの '名前'フィールドを抽出して表示することができるようにしたい。データがすでに正常に取得されているため、単純な解決策があると確信しています。CodeIgniterの - 私は、単一のレコードのすべてのフィールドを取得することができ、録音

MODEL - すべての選択を実行し、単一のレコード

// Select a record (all columns) from 'proposal_info' table per prop ID 
public function get_propinfo($propid) { 
    // Build query 
    $this->db->select('*'); 
    $this->db->from('proposal_info P'); 
    $this->db->join('status', 'P.status = status.id'); 
    $this->db->join('regions', 'P.region = regions.id'); 
    $this->db->join('usa_states', 'P.state_id = usa_states.id'); 
    $this->db->join('type', 'P.type = type.id'); 
    $this->db->where('P.id', $propid); 
    return $this->db->get(); 
} 

CONTROLLER返す - $データ[ 'propinfo'] =の$ this - > Propinfo_model-> get_propinfo($ _ SESSION [ 'session_propidを']) ;行は、モデルのクエリからレコードを取得する場所です。 'name'フィールドは$ data ['propinfo']の中に含まれていますが、コントローラでここでどのように取得できますか?そのように思えます

public function summary() { 
    $this->load->model('Propinfo_model'); 
    $data['page'] = "Project Summary"; 
    $data['allprops'] = $this->Propinfo_model->get_allprops($_SESSION['userid_db']); // required for LH nav proj list 
    $data['propinfo'] = $this->Propinfo_model->get_propinfo($_SESSION['session_propid']); // query for proposal info 
    $data['announcements'] = $this->Propinfo_model->get_announcements($_SESSION['session_propid']); // query for announcements 
    $this->load->view('templates/bp_header_view', $data); 
    $this->load->view('templates/bp_nav_view', $data); 
    $this->load->view('summary_view', $data); // page content 
    $this->load->view('templates/bp_footer_view', $data); 
    $this->load->view('templates/bp_endjs_view', $data); 
} 

ビュー - 残念ながら、これは私が '名前'フィールドを取得する方法を知っている唯一の方法です。これは、私はコントローラーではなく、ビューでこれをやってみたいです。

// Want to remove this code from the view and have 'name' passed from controller 
$row = $propinfo->row_array(); 
$proposal_name = $row['name']; 

ご意見は大歓迎です。

+0

要約メソッドで使用されているビュー内のデータベースからの名前のみが必要ですか? – TimBrownlaw

+0

CI dbメソッドは連鎖可能ですので、あなたのモデルで '$ this-> db-> query() - > row_array()'を使用し、コントローラ内の '$ data ['propinfo']'に配列を返しますか? CIのORMを使用していないので、私は正直にはわかりませんが、1行しか返さない場合は、モデルでそのバリエーションを実行できるようです。 – ourmandave

+0

TimB - すべてのフィールドが必要でしたが、例として 'name'を使用してビューページに単一のフィールドを表示する方法を見たいと思っていました。 – 12AX7

答えて

3

まず、あなたが取得したい場合は、ビューにあなたが

echo $propinfo['name']; 

で「名前」を取得するモデルがこの

return $this->db->get()->row_array(); 

get_propinfo($propid)の最後の行を変更することにより、row_arrayを返す必要がありコントローラ内の「名前」

$name = $data['propinfo']['name']; 

あなたの質問には関係ありませんが、私はcann自分自身を助けるot。これを行うと、ビューの読み込みが少し面倒になる可能性があります。

$this->load 
    ->view('templates/bp_header_view', $data) 
    ->view('templates/bp_nav_view') 
    ->view('summary_view') 
    ->view('templates/bp_footer_view') 
    ->view('templates/bp_endjs_view'); 

メソッドチェインが少し速く実行され、入力が少なくなります。

各表示負荷に$dataを渡す必要はありません。データはload->viewに送信されると、それがキャッシュされ、その後のload->viewの呼び出しに表示されます。あなたがそれを渡し続けるならば、あなたはすでに持っているのと同じ値でキャッシュを上書きするコードをたくさん実行し続けます。ビューに必要なデータを実際に追加または変更する場合は、データを渡す必要があります。

@ourmandaveが指摘しているように、メソッド連鎖はdbメソッドでも機能します。モデルでこれを試してみてください。

return $this->db 
    ->join('status', 'P.status = status.id') 
    ->join('regions', 'P.region = regions.id') 
    ->join('usa_states', 'P.state_id = usa_states.id') 
    ->join('type', 'P.type = type.id') 
    ->where('P.id', $propid) 
    ->get('proposal_info P') 
    ->row_array(); 

お知らせselect('*')from('proposal_info P')のの除去。テーブル名はget()呼び出しに移動されました。

db->get('optional table name')select()コールなしで使用すると、生成されるクエリステートメントにはSELECT *句が含まれます。

そうではありませんが、あなたのタイプはあなたのお友達です。

+0

Thx Dave!これが私が必要とする解決策です。ベストプラクティスを連鎖させるメソッドのThxも! – 12AX7

関連する問題