2013-02-22 28 views
0

我在cakephp中工作n我對它很陌生。我創建了一個將數據添加到數據庫的視圖。我希望編輯記錄 - 當用戶單擊編輯時,相同的添加視圖應該顯示填充了添加的數據。 我的問題是,我在表中有外鍵,當我點擊編輯時,文本框被填充外鍵ID而不是存儲在該ID中的文本。而且我還在一些字段中添加了一些jQuery。所以編輯這些字段時根本不顯示。以下是代碼:cakephp:在單個視圖中添加和編輯

public function ride_offer($id = NULL) { 

     if (empty($this->data)) { 

     $this->data = $this->Rideoffer->read(null, $id); 
     // debug($this->data); die; 
    } 

} 

ride_offer是添加視圖 - 我希望在編輯與添加的數據填充到打開相同。

<?php echo $this->Form->text('Rideoffer.DropAt', 
              array('class' => 'address-text', 
               )); ?> 

只是一個例子-Rideoffer.DropAt顯示id,而不是存儲在Place table中的實際地址。 Rideoffer表將地點的引用存儲爲DropAt。

我該如何解決這個問題?

+0

只是爲了確認,在RideOffer表中,DropAt場是外鍵到另一個表;你想獲取這些數據並將其顯示在文本框中? – Dunhamzzz 2013-02-22 11:36:41

回答

0

因爲不遵循cakephp naming conventions,你真的讓自己變得很困難。這就是大部分魔術發生的原因。您也可以使用此inflector查找來幫助您命名。

  1. 你的動作要ride_offer.ctp和你的控制器動作要public function rideOffer(){。是的,這應該仍然按照你的方式工作,但不是蛋糕的首選慣例。

  2. 您的表單字段的命名約定是由id的而不是vals填充應該是* _id。我真的不知道你是如何在你的<?php echo $this->Form->text('Rideoffer.DropAt', array('class' => 'address-text', )); ?> 表單字段中獲得任何種類的id

如果它是一個相關的表。這個名字應該是

<?php echo $this->Form->text('drop_at_id', 
              array('class' => 'address-text', 
               )); ?> 

然後你的控制器會通過將模型傳遞給視圖來神奇地填充vals。

//in your controller 
$this->set('dropAts', $this->RideOffer->DropAt->find('list')); 

在回答您的評論...您的ride_offer表應包含的記錄叫drop_at_iddropAt

+0

好的...但字段名稱是dropAt(其中包含id的dropAt地址)所以Rideoffer.dropAt意味着dropide(即id)在表Rideoffer – z22 2013-02-22 12:31:55

+0

我明白..但你不會得到你所尋找的,除非您正確使用命名約定。您的ride_offers表必須包含ride_at_id字段,您的ride_at表名必須爲ride_ats。如果你沒有這種方式,那麼在你的模型重命名和覆蓋所有建立在功能上的蛋糕上將是一場噩夢。 – 2013-02-22 12:35:43

+0

儘管我同意你應該堅持使用命名約定,但使用自己的命名不是不可能的。唯一會丟失的是CakePHP *自動查找要使用的正確列。因此,如果這是一個現有的數據庫,並且您無法修改其架構,則必須指定適用於所有關係和模型的正確列和表格 – thaJeztah 2013-02-22 13:05:18

相關問題