1

CodeIgniter を使用しています

私は2つのテーブルを持っています -

会社 の int id 、varchar 名

従業員の int id、varchar name 、int company_id

Employees Controllerという単純なコントローラーがあります

<?php 

class Employees extends CI_Controller {

    public function index()
           {

----
----
$data['employees'] = $selected_employees;
$this->load->view('employees/index',$data);
}

}

このコントローラーは、従業員の配列をビューに渡します。したがって、私のビュー内では、 employees[4].name 、 employees[3].id などを自由に使用できます

ここで、従業員の会社の名前を表示したい場合、唯一の方法は、コントローラーが会社の名前を含む別の配列をビューに渡すことです。これを達成するためのより良い方法はありますか?コントローラーが明示的にデータを送信する必要がないようにするには?

たとえば、 employees[4].company.name にアクセスしたいとします。 Rails に甘やかされてしまいました。私はこれらを当然のことと思っていました。

4

2 に答える 2

4

これを行う最善の方法は、SQL クエリで結合ステートメントを使用することです。通常、SQL クエリは次のようになります。

SELECT * FROM Employee JOIN Company ON Employee.company_id = Company.id

ただし、CodeIgniter のアクティブ レコード クラスは、これを単純化するのに役立ちます ( http://ellislab.com/codeigniter/user-guide/database/active_record.htmlを参照)。モデルでは、クエリを次のように記述できます。

$this->db->select('*');
$this->db->from('Employee');
$this->db->join('Company', 'Employee.company_id = Company.id');
$query = $this->db->get();

これを微調整して、SQL クエリのように必要な正確なデータを選択できます。

$this->db->select('Employee.id, Employee.name, Employee.company_id, Company.name AS company_name');

関数の 3 番目のパラメーターとして、左、右、外部、内部、左外部、または右外部を追加して、$this->db->join()左結合、右結合などを許可することもできます。

CodeIgniter アプリケーションでは、可能であれば Active Record クラスを使用することをお勧めします。これにより、クエリを整理し、整理し、読みやすくすることができます。

于 2013-03-08T15:47:31.553 に答える
2

モデルに参加する

public function get_ selected_employees(){
    $this->db->select('Employee.*, Company.name as company_name');
    $this->db->from('Employee');
    $this->db->join('Company', 'Employee.company_id = Company.id');
    return $this->db->get()->result();
}

会社名を取得するには、単に employees[4].company_name を実行します

于 2013-03-08T15:33:43.327 に答える