CakePHP使用两个控制器/模型


CakePHP working with two controllers / models

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

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

Users
Employees.

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

现在这两个都有一个Modela视图和一个控制器。现在我的问题分为两个部分,第一个是困难的部分:

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

员工表如下所示:

users_idUsers client_id

其中users_idUsers是来自用户表的userid

我该怎么处理?是否可以将另一个模型的功能添加到我的员工模型中?

第二个问题是这个问题的延伸,相对简单。。我想显示所有员工,但是视图应该与用户连接,这样您就可以在视图中看到人员的用户名。

应该说,我对蛋糕很陌生,所以我希望你们中的一些人能帮助我。

您想要的是将两个模型链接在一起。CakePHP有一个坚实的关系映射器,它可以为您完成所有这些操作,而无需"从上次插入中获取id并用它做其他事情"。

如果我没有错的话,你的问题简单来说就是:

An Employee hasMany users
A User belongs to one Employee

对于一对多模型关系,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))

这将返回与员工的关联数组。

顺便说一句:递归=1的使用有点过时。有一种更好的东西叫做"可控制",它允许您根据需要注入模型。这超出了这个问题的范围,但我想我会提到它。