2012-02-20 114 views
2

我有一个ProductsController,我在其中检索产品数据并需要检索类别名称。 (注意:我的产品表中只有Category_ID),如何使用CakePHP模型关联来做到这一点?使用CakePHP模型关联检索多个表中的值

我已经看到主数据表(在我的情况下,产品表)的ID是关联表中的外键的示例。但是,我的情况稍有不同,因为Category_ID(来自辅助表)是Main表(Products表)的一部分。

我无法使用CakePHP模型配置检索类别名称。你能帮我吗?

我的ProductsController是在具有

ID 
Prod_Name 
Category_ID 
.... 

我的分类表就像

ID 
Cat_Name 

在我的ProductsController我想检索Cat_Name产品被检索Products表。

回答

6

在您的产品型号,使用联想:

var $belongsTo = array(
    'Category' => array(
     'className' => 'Category', 
     'foreignKey' => 'category_id', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    ) 
); 

当检索您的产品数据使用find方法:

$this->set('variable', $this->Product->find('all')); 

一旦它在你看来,这是一个包含所有的产品阵列及其类别。 赞:

<?php 
foreach($variable as $itemInTable): 
    echo 'Product:' . $itemInTable['Product']['Prod_Name']; 
    echo 'Its Category:' . $itemInTable['Category']['Cat_Name']; 
endforeach; 
?> 
1

fzmaster的回答是正确的。当表A中的外键与表B中的ID相对应时,则表示模型A“属于”模型B.同时,可能存在反比关系,其中模型B“具有许多”模型为。

该协会是范围内相当简单,如果你使用的Cake naming conventions,您可以用最少的额外代码模型相关联:

class Product extends AppModel{ 
    var $belongsTo = array('Category'); 
} 

class Category extends AppModel{ 
    var $hasMany = array('Product'); 
} 

在这一点上,CakePHP的Model::Find()方法将自动检索关联模型,除非你将其限制为$recursive或使用Containable行为。

+0

正是我需要的! – Kingsolmn 2015-03-27 17:20:13