【问题标题】:Manage multiple tables relationed in CakePHP管理 CakePHP 中关联的多个表
【发布时间】:2013-05-05 05:16:01
【问题描述】:

所以,我有三张桌子

表:用户

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

Table: Hability_lists // 我在哪里设置了所有可用功能的列表

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

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

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

由此我们可以看出:

RoyASP 程序员BenPHP 程序员

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

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

提前致谢。

【问题讨论】:

  • 嗨@Alexandre,请您发布您的模型代码,以便我们查看您当前的关联?

标签: php cakephp model


【解决方案1】:

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

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

应该是这样的:

表功能: 从能力中选择*;

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

表用户: 从用户中选择 *;

+----+-------+---------------------+---------------------+
| 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 的关系表: 从 habilities_users 中选择 *;

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

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

定义模型类也很重要,因为您可以在其中定义它们的所有关联。

app/Model/User.php

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

app/Model/Hability.php

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

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

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

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

【讨论】:

    【解决方案2】:

    你会想要使用HasAndBelongsToMany (HABTM)

    这允许您拥有两个模型 - UserHability,它们由“tweener”表连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-22
      • 1970-01-01
      相关资源
      最近更新 更多