0

所以,我有三张桌子

表:用户

_________________
| 编号 | 用户 |
------------------
| 1 | 罗伊 |
| 2 | 本 |
|________|________|

表:Hability_lists // 我在其中设置了所有可用能力的列表

___________________________________
| 编号 | 类别 | 子类别 |
----------------------------------
| 1 | 程序员 | PHP |
| 2 | 程序员 | 平均价格 |
|________|____________|_____________|

表:Habilities // 我在哪里设置所有用户的 habilities

________________________________________
| 编号 | 用户 ID | hability_list_id |
-----------------------------------------
| 1 | 2 | 1 |
| 2 | 1 | 2 |
|________|____________|__________________|

由此,我们可以看到:

RoyASP 程序员BenPHP 程序员

但是,如何使用 CakePHP 设置这样的相关模型呢?我知道如何使用两个模型但不使用三个模型。

有什么方法可以做到这一点?或者也许有更好的方法?

提前致谢。

4

2 回答 2

3

使用 MVC 框架时,强烈建议遵循其约定。因此,一些更改可能对您有益。

您正在寻找它的“用户”表和“能力”表 * 之间的 HABTM(拥有并属于许多)关联。我猜,根据你的表的设计,一个用户可以有多种能力,否则你应该检查 hasMany 关联。

它应该是这样的:

表habilities:select * from habilities;

+----+------------+----------------------+----------+
| id | category   | subcategoy | created | modified |
+----+------------+------------+---------+----------+
|  1 | Programmer | ASP        |         |          |
|  2 | Programmer | PHP        |         |          |
|  3 | Musician   | Classical  |         |          |
+----+------------+------------+---------+----------+

表用户:select * from users;

+----+-------+---------------------+---------------------+
| id | name  | created             | modified            | **
+----+-------+---------------------+---------------------+
|  1 | Roy   | 2012-08-15 02:52:18 | 2013-01-17 03:25:28 |
|  2 | Ben   | 2012-11-10 03:36:12 | 2012-11-10 03:36:12 |
+----+-------+---------------------+---------------------+

HABTM 的关系表:select * from habilities_users;

+----+-------------+-------------------+----------+
| id | hability_id | user_id | created | modified |
+----+-------------+---------+---------+----------+
|  1 | 1           | 2       |         |          |
|  2 | 2           | 1       |         |          |
+----+-------------+---------+---------+----------+

查看 habilities_users 中的参考列,它们是单数的,带有 _id 后缀以与 CakePHP 一起使用。

定义模型类也很重要,因为它是您定义所有关联的地方。

应用程序/模型/User.php

<?php
class User extends AppModel {
  public $hasAndBelongsToMany = array('Hability');
}

应用程序/模型/Hability.php

<?php
class Hability extends AppModel {
  public $hasAndBelongsToMany = array('User');
}

表 habilities_users 不需要模型文件,其行为和属性隐含在其关联模型的声明中。

* 使用这些名称也是 CakePHP 的方式。[链接]

** 在每个表中添加“created”和“modified”将自动为每条记录存储这些事件。

于 2013-05-04T21:16:01.803 回答
1

你会想要使用HasAndBelongsToMany (HABTM)

这允许您拥有两个模型 -User并由Hability“tweener”表连接。

于 2013-05-04T21:01:09.207 回答