CakePHP使用两个控制器/模型

时间:2013-08-09 10:01:24

标签: php cakephp cakephp-appmodel

首先,我很抱歉这个问题的名称我很难弄清楚该怎么称呼:

这是我的问题,我有以下两个数据表:

Users

Employees.

这两个数据表以1对1的关系连接

现在这两个都有一个模型视图和一个控制器。现在我的问题有点分为两部分,首先是困难部分:

每当员工想要创建新用户(新员工)时,他必须先将数据插入users表中的两个表中,然后在user_id中添加employee后的记录{1}}表

员工表如下所示:

users_idUsers client_id

其中users_idUsers是用户表中的userid

我将如何解决这个问题?是否可以将其他模型的功能添加到我的员工模型中?

第二个问题是对此的扩展并且相对简单..我想显示所有员工,但是视图应该与用户一起加入,以便您可以在视图中看到该人的用户名。

应该说我对Cake很新,所以我希望你们中的一些人能够帮助我。

1 个答案:

答案 0 :(得分:2)

您所追求的是将两个模型链接在一起。 CakePHP有一个可靠的关系映射器,可以为您完成所有这些操作,而无需“从最后一个插入中获取id并使用它执行其他操作”。

如果我没弄错的话,你的问题就是:

An Employee hasMany users

A User belongs to one Employee

对于1对多的模型关系,CakePHP有一个名为“hasMany”的东西:http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#hasmany

例如,用户可以做出很多评论。员工可以创建许多用户。

在用户和员工之间的关系的另一面,您需要一个“belongsTo”映射,因此您知道该用户是由某个员工添加的:http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#belongsto

通过这种方式,您可以通过搜索“通过用户”找到添加“用户X”的员工,可以这么说。

当您将模型映射到一起时,诸如检索数据(如findBy:http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#findby)和管理模型关系之类的事情变得更加容易,因为您不必过多考虑关系如何链接在一起(这是模型映射的用途如上所述),而是您要检索的内容。

反过来,它允许你直观地做这样的事情

$this->Employee->find('all', array(
            'recursive' => 1,
            'fields' => array('employee.name, employee.age')
            ));

或者如果您想找到添加用户“Sarah”的员工。

$this->Employee->User->find('all', array(
'conditions' => array('User.name' => 'Sarah'),
'fields' => 'Employee.*',
'recursive' => 0))

将与员工一起返回一个关联数组。

作为旁注:recursive = 1的使用是老式的。 There is something much better called "Containable"允许您根据需要注入模型。这不在这个问题的范围之内,但我会提到它。