我正在編寫我的第一個Cake應用程序並試圖設置我的第一個深度關聯。它幾乎工作,但我有幾個小問題。與CakePHP進行深度關聯的表單,幾乎可以工作
我的應用程序的第一部分是客戶數據庫。一個客戶有很多地址,並且一個地址有很多聯繫人。返回的數據結構包含來自地址模型的重複數據。
Here's the 3 models:
class Customer extends AppModel {
public $hasMany = 'CustomerAddress';
}
class CustomerAddress extends AppModel {
public $belongsTo = 'Customer';
public $hasMany = 'CustomerContact';
}
class CustomerContact extends AppModel {
public $belongsTo = 'CustomerAddress';
}
在我的客戶控制器中,我想獲取關聯的地址及其聯繫人。我可以通過find命令遞歸設置做到這一點:
CustomerController.php
public function find($id = NULL) {
$this->set('customers', $this->Customer->find('all', array('recursive' => 2)));
}
這出色的作品,有一點需要注意。數據結構返回這個樣子的:
array(
'Customer' => array(
'id' => '46',
....
),
'CustomerAddress' => array(
(int) 0 => array(
'id' => '35',
'customer_id' => '46',
.....
'Customer' => array(
'id' => '46',
.....
),
'CustomerContact' => array(
(int) 0 => array(
'id' => '29',
'customer_address_id' => '35',
.....
)
)
)
)
)
一目瞭然,這看起來不錯,併爲所有意圖和目的的數據被格式化你如何期望的工作。但是,CustomerAddress也包含一個Customer對象,它是頂級Customer對象的副本。我認爲這是因爲遞歸與地址模型中的belongsTo一起工作。
我試着將遞歸設置爲1,但後來我只得到地址而不是聯繫人。我已經嘗試在地址模型中設置遞歸,但這似乎不會影響客戶級別的查找。
這不是一個大問題,只是擔心未來的性能問題和不必要的數據庫調用。
乾杯!我在看可遏制的東西,但食譜似乎在推動他們限制返回的字段。這很好。希望你能幫助我的下一個問題:) – Dabrowski 2014-10-07 16:13:43