Cakephp 2 - 最简单的关联

时间:2014-03-04 10:51:15

标签: cakephp relationship

我很难说蛋糕是最简单的联想。

我有两个型号:

  1. CoreUser.php
  2. CoreRole.php
  3. 一位用户 一个角色

    如何分配蛋糕? (HasOne或BelongsTo?=>何时选择什么?)

    什么型号放什么?我尝试了两种方法,最终导致了一个递归错误,或者它只是不起作用。

    我的SQL表:

    tbl )core_users [id,username,password,role_id]

    tbl )core_roles [id,name]

    我的模特:


    class CoreUser extends AppModel {
    
    public $hasOne = array(
            'Role' => array(
                'className' => 'CoreRole',
                'foreignKey' => 'id'
            )
        );
    }
    

    class CoreRole extends AppModel {
    
    public $belongsTo = array(
            'User' => array(
                'className' => 'CoreUser',
                'foreignKey' => 'role_id'
            )
        );
    }
    

    => 你能否给我一些正确的代码,我需要插入两个(或两个)模型中的一个来告诉蛋糕这个关系?

    提前致谢

1 个答案:

答案 0 :(得分:1)

理论上,你需要考虑两件事,其中一件是非Cakephp特定的。

:一种。关系:关系始终是双向的。在确定两个模型/对象/表之间的关系时,您总是会问两个问题:

  
      
  1. B的一个实例与A的一个实例有多少个<?li>   
  2. A的一个实例与B的一个实例有多少个实例?
  3.   

你说过,一个用户有一个角色。但是,One Role有多少用户与之相关?这将告诉您用户和角色之间的完整关系。 (为离题而道歉,但这很重要,我引用this book。)

<强> B中。 hasMany和belongsTo:之间的区别 这是基于遍历关系的方向确定的。 根据A点,说你已经确定: 一个用户有一个角色但是一个角色有很多用户。

现在当您在用户模型中尝试获取相关的角色数据时,您需要在用户模型中定义以下内容:

class CoreUser extends AppModel {
  public $belongsTo = array(
    'Role' => array(
       'className' => 'CoreRole',
       'foreignKey' => 'role_id'
    )
  );
}

但是当您处于Role的模型并尝试获取相关的用户数据时,您需要在Role模型中定义以下内容:

class CoreRole extends AppModel {
  public $hasMany = array(
    'User' => array(
       'className' => 'CoreUser',
       'foreignKey' => 'role_id'
    )
  );
}

有关完整讨论,请参阅this answer