2012-02-20 58 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