从另一个表中获取另一个字段的值?CakePHP
我有两个表,从另一个表中获取另一个字段的值?CakePHP,php,cakephp,Php,Cakephp,我有两个表,部门和用户。在用户上,我有以下字段: id | username | password | email | department | date_created id | name 现在在部门,我有以下字段: id | username | password | email | department | date_created id | name users表上的department字段是INT,它指向departments表上相应的id。在web上呈现时,如何检索相应的名称
部门
和用户
。在用户
上,我有以下字段:
id | username | password | email | department | date_created
id | name
现在在部门
,我有以下字段:
id | username | password | email | department | date_created
id | name
users
表上的department
字段是INT
,它指向departments
表上相应的id
。在web上呈现时,如何检索相应的名称
,以显示在部门
字段上?我试过这样做,但似乎不起作用
class UsersController extends AppController {
public function index() {
$this->set('users', $this->User->find('all'));
$departmentsArray = array();
$departments = $this->Department->find('all');
foreach ($departments as $department) {
$departmentsArray[$department['Department']['id']] = $department['Department']['name'];
}
$this->set('departments', $departmentsArray);
}
}
我打算用它来检索View\Users\index.ctp
上的数据。但是,它给了我一个错误:
Error: Call to a member function find() on a non-object
File: D:\server\root\app\Controller\UsersController.php
Line: 11
第11行是$departments=$this->Department->find('all')代码>来自我上面给出的第一个代码块
抱歉,如果这看起来太复杂了,如果有更简单的方法,请告诉我。我想简单地说,我需要通过从另一个表定义的id检索表中的数据
编辑:
来自Hyarion的附加信息,而不是使用find('all')
我使用了find('list')
,因此我将代码行从6行减少到1行:)以下是新代码:
class UsersController extends AppController {
var $uses = array('User', 'Department');
public function index() {
$this->set('users', $this->User->find('all'));
$this->set('departments', $this->Department->find('list'));
}
}
您还需要告诉控制器为部门加载模型。默认情况下,它仅加载用户
将其添加到控制器的顶部:
var $uses = array('User', 'Department');
您还需要告诉控制器为部门加载模型。默认情况下,它仅加载用户
将其添加到控制器的顶部:
var $uses = array('User', 'Department');
哦,太好了!我不知道。现在好像有用了。谢谢另外一个问题,虽然不是我现在关心的问题:这是正确的方法吗?如果要加载的部门很多,这种方法将来不会导致性能下降吗?有更无缝的方法吗?这是正确的方法:)我不确定性能,但我认为它实际上只使用模型,如果你调用它的话。作为一个说明,我只是查看了你的循环,我不确定,但我想你可能想尝试模型->查找('list'),而不是模型->查找('all')。好吧,天哪,我试着使用find('list'))
我的代码缩小到一行!:D$this->set('departments'),$this->Department->find('list')再次感谢!哦,太好了!我不知道。现在好像有用了。谢谢另外一个问题,虽然不是我现在关心的问题:这是正确的方法吗?如果要加载的部门很多,这种方法将来不会导致性能下降吗?有更无缝的方法吗?这是正确的方法:)我不确定性能,但我认为它实际上只使用模型,如果你调用它的话。作为一个说明,我只是查看了你的循环,我不确定,但我想你可能想尝试模型->查找('list'),而不是模型->查找('all')。好吧,天哪,我试着使用find('list'))
我的代码缩小到一行!:D$this->set('departments'),$this->Department->find('list')再次感谢!