2013-03-23 75 views
0

每個命令都有字段'from_str'和'from_bldg'。 爲了模型我創建的虛擬域「從」是連接這些字段:CakePHP:虛擬域的可變源

public $virtualFields = array(
    'from' => 'CONCAT(Order.from_str, " ", Order.from_bldg)' 
); 

然而,訂單也有一個鏈接到一個公司。因此,如果field from_company_id不是0/null,我想在Order的「from」字段中顯示公司名稱。

例如:

Order1有from_str = "Baker st"from_bld = "221B",並且from_company_id = "0"
Order2有from_strfrom_bld null,但from_company_id = "1"

公司與ID = 1有名字 「孫公司」

因此,對於Order1的「from」字段,我想要有「Baker st 221B」,
,而對於Order2的「from」字段,我希望得到「Sun,Inc.」

模型或控制器的代碼看起來會是什麼樣子?

+0

如果我理解正確的話,該公司的信息(街道名稱,建築物)存儲在單獨的數據庫表(例如'公司'),並且如果'id'匹配'from_company_id',應該與訂單一起顯示? – thaJeztah 2013-03-23 09:42:40

+0

是的,沒錯。我有單獨的公司表。 – Gizzat 2013-03-23 11:47:57

回答

1

您需要在兩個模型之間建立關係。由於您沒有根據CakePHP約定命名外鍵(即company_id),因此您必須自行指定。

應用/型號/ Order.php

class Order extends AppModel { 
    public $belongsTo = array(
     'Company' => array(
      'foreignKey' => 'from_company_id', 
     ) 
    ); 
} 

應用/型號/ Company.php

class Company extends AppModel { 
    public $hasMany = array(
     'Order' => array(
      'foreignKey' => 'from_company_id', 
     ) 
    ); 
} 

而且,你的控制器內;

$order = $this->Order->find('first, array(
    'conditions' => array(
     'Order.id' => $id, // or whatever name the ID has 
    ), 
    'recursive' => 1, 
)); 

debug($order); 

這應該給你倆訂單'公司'細節。 但是,公司細節將在$order陣列內的單獨'鑰匙'('公司')中。如果這只是爲了在視圖中輸出順序,我沒有看到使用virtualField將數據合併到數組內的「Order」鍵的理由。

如果數據合併到同一個鍵是一個重要的要求,請描述你的要求的話,我可以幫助你進一步

+0

thaJeztah,非常感謝! 模型之間的關係解決了一切! =) 不,我可以從$訂單訪問所有公司信息。 – Gizzat 2013-03-23 13:27:12

+1

很高興能幫到你!祝你的項目好運。如果這是一個新項目,請在命名數據庫字段和表時嘗試遵循CakePHP約定,這將爲您節省很多問題和配置。閱讀這裏的文檔[示範公約](http://book.cakephp.org/2.0/en/getting-started/cakephp-conventions.html#model-and-database-conventions) – thaJeztah 2013-03-23 13:32:28