2012-02-05 32 views
0

我的多層次MVCGrid/MVCForm/MVCGrid傳奇繼續....MVCGrid W /擴展(父)調用的MVC格式(子)和加載子記錄 - 更新

我使用與擴展按鈕嵌套MVCGrids調用MVCForms來執行不同的數據操作。此進程中的所有mySQL表都有一個「id」數據元素,並且這是每個表的主鍵。在需要時使用_id命名約定,每個mySQL表也有一個指向其父項的指針。所有的外鍵都已經在mySQL中設置,以此方式工作。

父的模型是這樣的:

類Model_uidcontrol擴展Model_Table {

public $entity_code='uidcontrol'; 
public $table_alias='uc'; 

function init(){ 
    parent::init(); 

對孩子的模型是這樣的:

類Model_uiddetails擴展Model_Table {

public $entity_code='uiddetails'; 
public $table_alias='ud'; 
function init(){ 
    parent::init(); 

每個模型都有自己的「id」和一個指針t o其父母。

在MVCGrid(父)的擴欄調用此子功能:

$um=$this->add('MVCForm'); 

$um->setModel('uiddetails') 
    ->loadData(($_GET['uidcontrol_id'])); 

我在子模型嘗試這樣做:

$this->addRelatedEntity('uc','uidcontrol','uidcontrol_ID'); 

,這也:

$this->addField('uidcontrol_id') 
->refModel('Model_uidcontrol') 
     ->caption('System Info') 
     ->visible(true); 

我已經嘗試過每種技巧,並一起分別獲取兒童記錄與正確的父母進行協調。

調試()表示該

其中

ud.id = '121' 
ud.uidcontrol_id = '121' 

OK,我明白$ GET和它是如何工作的,以及如何,涉及到DSQL - 至少我覺得我做的。

我想不通的是如何告訴MVCForm使用「ud.uidcontrol_id =「121」通過$ GET建設數據加載DSQL時來 ,而不是使用‘ud.id’

在上面的例子中,有一個具有該id的父記錄「uidcontrol」。我強迫孩子記錄的'id'爲121,看看它是否會提取數據並將其顯示在表單中。好的,數據顯示應該如此。

當我嘗試該父其的 'id'= 10,調試()產生此

ud.id = '10' 
ud.uidcontrol_id = '10' 

並返回任何數據。有一個id = 10的uidcontrol記錄,但dsql也嘗試與ud.id = 10匹配。

我可以發佈更多我正在努力澄清我想要做什麼,如果有幫助。

理想情況下,我想告訴MVCForm「嘿!在構建dsql時不要使用'id'數據元素,而是使用我提供的數據元素。問題是,我無法弄清楚如何做到這一點......但我一路上學到了一堆東西。我認爲我可能在這裏「過度思考」某些東西。

感謝您的任何建議!

週一2月6注:

的var_dump($ _ GET);說:

的 'id'=>字符串 '10'(長度= 2)< === uidcontrol.id 'uidcontrol_id'=>字符串 '10'(長度= 2)< === uidcontrol.id

我寫這篇文章:

$um->setModel('uiddetails') 
    ->addCondition('uidcontrol_id',($_GET['id'])) 
    ->loadData(($_GET['id'])); 

和SQL調試顯示了這個正在興建

其中

ud.id = '10' 
ud.uidcontrol_id = '10' 

問題是我只想要「ud.uidcontrol_id ='10'」。表uiddetails具有它自己的ID 125和uidcontrol_id值10.結果,查詢不會返回記錄。

回答

0

loadData方法只通過它們的id加載記錄。要通過參考記錄鏈接「孩子」模型,您必須使用setMasterFieldaddCondition指示模型過濾關係。

+0

我明白你寫什麼,但我遇到的問題是, 「addCondition」 被追加到預選賽:\t $ UM->則setModel( 'uiddetails') \t \t - > addCondition( 'uidcontrol_id',($ _ GET ['uidcontrol_id'])) \t \t - > loadData(($ _ GET ['uidcontrol_id'])); – 2012-02-06 13:52:41

+0

根本不需要使用'loadData'!條件是識別兒童記錄的條件。 – 2012-02-06 16:27:15

+0

經過很多工作,似乎MVCForm將使用'id'字段作爲條件,而不管它是什麼。 「setMasterField」附加到現有條件而不是替換它。 – 2012-02-07 21:07:44