2015-11-03 86 views
0

我正在轉換一個10歲的PHP應用程序。在我的老闆聘請了一位PHP顧問後,他建立了一個CakePHP應用程序環境,我們正在學習。 (有趣,我知道)。另外,我來自JavaScript/Sharepoint背景,並沒有很多的PHP經驗。如何在CakePHP中創建查找

作爲測試,我創建了一個基本地址表,其中包含這些字段:名字,姓氏,州,電話號碼。我一直在使用正義聯盟成員作爲姓名和其他測試數據來填充我的表格。烘烤它就好了,默認引導頁面正在工作。

我決定添加一個名爲current status的下拉字段,現在爲了簡單起見,我想要選擇:alive,dead.I在地址表中創建了列。

我創建了第二個稱爲狀態的表,並使用狀態ID作爲foriegn鍵將狀態列指向狀態表的第一個表中。

烤了我的新桌子,重新彈了我的舊桌子。

狀態下拉並不會讓我選擇死或活,如果我點擊字段,我會得到一個向上或向下的箭頭,並根據您點擊哪一個箭頭來增加或減少1.因此,第一次點擊它會插入一個0.如果我上去或下去,它會增加或取消一個。

我不知道我在做什麼錯,我猜想有一些額外的代碼我需要添加到MVC?

+0

你說你重新烤你的舊桌子。那包括控制器嗎? –

回答

1

好吧,如果這個工作,那麼很多工作:-)。現在到了以下內容:

public function getStatus() 
{ 
    $opt = $this->Status->find('list', array(...)); 
    return $opt; 
} 

然後在獲得的列表中ADRESS控制器這樣的:

$this->loadModel('Status'); 
$opt => $this->Status->getStatus(); 
$this->set('opt', $opt); 

現在你可以在狀態模式這樣的查詢設置訪問視圖文件中的$ opt。 只要刪除此行的觀點:

$opts = array('0' => __('dead'), '1' => __('alive')); 

,它應該工作。

0

保持簡單。廣告到你的表這一行(只是爲了理解它是如何工作的):'狀態'爲典型的「tinyint(1)」。然後設置這個在您的視圖文件:

$opts = array('0' => __('dead'), '1' => __('alive')); 

當您創建inputfield,那樣做:

echo $this->Form->input('Address.status', array('options' => $opts, 'label' 
=> __('Status'))); 

這應該工作。

+0

我很感激幫助。我已經建立了一個像你一樣的例子。我的問題是,對於我正在移植的很多應用程序,當用戶通過添加政府合同數據的應用程序移動時,選擇/下拉內容將基於其他表格。事情是,我已經讓它工作了,但它只是顯示錶格中四個項目的ID而不是名稱。 – andthenwhathappened