1

我正在使用 CodeIgniter

我有两张桌子 -

公司 int id , varchar 名称

员工int id, varchar name , int company_id

我有一个简单的控制器,叫做员工控制器

<?php 

class Employees extends CI_Controller {

    public function index()
           {

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

}

该控制器将一个Employees 数组传递给视图。所以在我看来,我可以自由使用 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');

您还可以添加左、右、外、内、左外或右外作为$this->db->join()函数的第三个参数,以允许左连接、右连接等。

I would recommend using the Active Record class when possible in your CodeIgniter applications. It will help keep your queries clean, organized, and readable.

于 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 回答