0

我对 cakePHP 还很陌生,我正在尝试构建一个简单的 webapp。

我有 3 个模型:属性、操作和类别。

我的人际关系是:

Category -> hasMany -> Property
Operation -> hasMAny -> Property

每个属性都有一个用于类别 (cat_id) 和操作 (op_id) 的外键。

我想要做的是显示每个属性(在相应的视图中)与类别和操作的名称(相应表中的字段是“名称”),而不是 ID。我怎样才能做到这一点?

更新:

所需输出的一个示例是:

ID    category    operation description ....

1     House       Sell       a house   ....

我现在拥有的是

ID    category    operation description ....

 1     2          3           a house   ....

2 和 3 分别是 'house'(category, cat_id) 和 'sell'(operation, op_id) 的 ID

这是类别模型的代码:

class Category extends AppModel{
    public $hasMany = array(
    'Property'=>array(
        'foreignKey' => 'cat_id'
    ));
}

先感谢您。

4

2 回答 2

0

属性(id、名称、category_id、operation_id)

类别(ID,名称)

操作(ID,名称)

当您使用递归 = 1 或 2 在属性表上进行查找时,您将自动获取所有相关数据

于 2013-06-19T08:21:34.597 回答
0

找到了解决方案!比我想象的要容易。

首先,“hasMany”的使用并不理想。我所做的是在属性模型中使用关系“belongsTo”:

class Property extends AppModel{
    var $name = 'Property';
    public $belongsTo = array(
        'Category' => array(
            'foreignKey' => 'idCat'         
        ),
        'Operation' => array(
            'foreignKey' => 'idOp'              
        )
    );
}

现在神奇的是:每当我在 PropertiesController 中执行 find() 时,我得到的是一个包含属性数据的二维数组,以及它所属的表的数据。:

Array
(
   [Property] => Array
        (
        [id] => 1
    )
[Category] => Array
    (
        [id] => 2
        [name] => House
    )
[Operation] => Array
    (
        [id] => 3
        [name] => Sell
    )

) 现在在视图中,而不是,例如,['Property']['idCat'] 我只使用 ['Category']['name'] 并且一切正常。

谢谢您的帮助!

PS:对不起,任何误解,不是母语人士。

于 2013-06-19T13:04:26.170 回答