0

単一の行を選択するときに結合を機能させようとしています。ここに私のコードがあります:

モデル:

          function view($id) {
            $this->db->select('c.name
                                ,c.phone
                                ,c.active
                                ,c.website
                                ,c.date_acquired
                                ,con.firstName');
            $this->db->from('company c');
            $this->db->join('contacts con','c.primary_contact = con.id','left');
            $this->db->where('id', $id);
            $query = $this->db->get();
            return $query->row_array();

コントローラ:

public function view($id)
{

    $this->load->model('Company_model');
    $data['data']= $this->Company_model->view($id);
    $this->load->view('templates/header');
    $this->load->view('company/view', $data);
    $this->load->view('templates/footer');

}

私が得ているエラーは次のとおりです。

致命的なエラー: 35 行目の /home/techf/public_html/application/models/company_model.php の非オブジェクトに対するメンバー関数 row_array() の呼び出し

上記のコードの 35 行目は次のとおりです。

$query = $this->db->get()

結合と行配列を扱う場合、これは正しくありませんか?

**

編集 1

**:

これが私のコントローラーです:

public function view($id)
{

    $this->load->model('Company_model');
    $data = $this->Company_model->view($id)->row();
    $this->load->view('templates/header');
    $this->load->view('company/view', $data);
    $this->load->view('templates/footer');

}

と私のモデル:

function view($id) {
            $this->db->select('*');
            $this->db->from('company');
            $this->db->join('contacts con','c.primary_contact = con.id','left');
            $this->db->where('id', $id);
            return $this->db->get('company');
 }

しかし、今はエラーが発生しています:

致命的なエラー: 21 行目の /home/techf/public_html/application/controllers/company.php の非オブジェクトに対するメンバー関数 row() の呼び出し

4

3 に答える 3

0

num_rows()モデルでは、 を送信する前に が 1 より大きいかどうかを最初にテストしrow、そうでない場合は return を テストすることに注意falseしてください。

this->db->getfrom メソッドに既に追加しているため、テーブルの名前を削除したことに注意してください。

        $this->db->select('*')
                ->from('company c');
                ->join('contacts con','c.primary_contact = con.id','left');
                ->where('id', $id);
        $query = $this->db->get();
        return $query->num_rows() >= 1 ? $query->row() : FALSE;

を追加するのを忘れ た変数に、これはビューの変数/オブジェクトにアクセスするときに使用されます。例は次のとおりです。datakey$data['contacts']

public function view($id)
{

    $this->load->model('Company_model');
    $data['contacts'] = $this->Company_model->view($id);
    $this->load->view('templates/header');
    $this->load->view('company/view', $data);
    $this->load->view('templates/footer');

}

VIEWSで、contacts以前にコントローラーに割り当て たキーにアクセスします。

<?
 if(!empty($contacts))
{
   print_r($contacts);
}else{
   echo 'No data';
}


?>

標準の MySQL クエリでクエリの構造を表示するには

モデルの をコメント アウトして、このコード スニペットをメソッドreturnの直後に追加できます。$this->db->get()

echo $this->db->last_query();
die();

これにより、作成されたクエリがエコーされ、それを実行してphpmyadmin、返された値が正しいかどうかを比較できます。

于 2013-06-08T06:42:53.983 に答える
0

このように試してみることができますか?

モデル: (どのテーブルが id で、どの primary_contact にあるかわからないので、間違えた場合は変更してください)

function view($id) {
    $this->db->join('contacts','company.primary_contact = contacts.id','left')
        ->where('id', $id);
    $query = $this->db->get('company');
    return $query->row();
}

コントローラーでは、次のように呼び出します。

$data['result'] = $this->company_model->view($id);

ビュー内のオブジェクトにアクセスします。

<?=$result->id?> (etc.)
于 2013-06-08T19:05:45.180 に答える