你非常接近。
1.)URL簡單地是/控制器/動作。數據通過$ this->數據傳遞,並且在動作中神奇地可用。 **因爲你在助手而不是'Javascript'中列出'Js',所以我假設你使用的是Cake 1.3.x和jQuery,因爲jQuery是Cake 1.3的默認值,而Js取代了Javascript/Ajax。
- 修復你的助手:
var $helpers = array('Html', 'Form', 'Js'=>array("Jquery"));
- 解決您的jQuery:
$.ajax({
url:'/orders/save_column_order',
type:'POST',
data:data
});
2)使用Cake的魔力:
function save_column_order() {
if ($this->data != null) {
$this->Model->save($this->data);
// whatever else needs doing...
}
}
- 既然你做ajax,你可能不希望Cake的默認視圖渲染行爲(只是猜測。)如果你想渲染任何視圖的話,那可能只是一個爲Ajax回調標記的剪斷,所以你可能希望把它放在一個元素,而不是一個全面的看法:
function save_column_order() {
// ...
/* arg 1 - you can specify any view or element you like.
arg 2 - enforces your preferred request handling and layout */
$this->set(compact('vars', 'for', 'view'));
$this->render('/elements/new_column_order', 'ajax');
}
- 否則,只是抑制渲染:
function save_column_order() {
...
$this->autoRender = false;
}
- 如果您保存不起作用,請確保$ this-> data的結構是Cake-save-friendly。如果您需要查看的$這個 - 內容>數據,Cake的內置調試(從您的應用程序的任何地方)將幫助你理順:
debug($this->data);
3)等等,什麼?
不知道我明白你問的是正確的,所以如果這不包括你的問題,請澄清你想要做什麼?
如果你的意思是,Cake允許你手動更新表中的記錄,是嗎?雖然我不確定你爲什麼想要。 Cake非常強大的內置ORM是該框架的一半,而其非常全面的魔力則是另一半。
你可以用Model :: sql()方法直接寫SQL,雖然這不鼓勵它是OOP或可重用的。
當您在模型中定義關聯時,可以將外鍵設置爲false,並指定在Cake的自動連接中像嵌套選擇一樣工作的條件。如果你需要強制連接/ s,Cake的$ options ['joins']會給你完全細化的控制;你可以指定任何類型的JOIN,如果默認的LEFT不足以滿足你需要做的事情。
您可以使用$ this-> Model-> bind()/ unbind()動態創建和中斷模型綁定。您可以指定遞歸級別,應用可包含行爲,指定要選擇的字段以及所有條件。
如果你需要一個子查詢和蛋糕只是無法得到它的權利,$ dbo-> buildStatement()將構建SQL語句和$ dbo->表達式()會火了:
function intricate() {
$dbo = $this->Rate->Status->getDataSource();
$subquery = $dbo->buildStatement(
array(
'fields' => array('`Status`.`id`'),
'table' => $dbo->fullTableName($this->Rate->Status),
'alias' => 'Status',
'limit' => null,
'offset' => null,
'joins' => array(),
'conditions' => $subqueryConditions,
'order' => null,
'group' => null
),
$this->Rate->Status
);
$subquery = "Status.id = (".$subquery.")";
$status = $dbo->expression($subquery);
$options['fields']=
array(
"Rate.id", "Rate.plan_id", "Rate.status_id","Rate.rate", "Plan.id",
"Plan.company_id", "Plan.name", "Company.id", "Company.name"
);
$options['conditions']=
array(
$status,
"Geographical.name LIKE '%{$this->zip}%'"
);
$rates = $this->Rate->find('all', $options);
$this->set(compact('rates'));
}
- 如果你的意思是 - Cake是否允許你即時更換數據庫配置,是的。然而,這樣做可能會變得非常頑固,特別是當Cake的魔法是情況的一部分時。
您可以/app/config/database.php添加多個分貝CONFIGS -
class DATABASE_CONFIG {
var $default = array(
'driver' => 'mysql',
'persistent' => false,
'host'=>'localhost',
'login' => 'cake',
'password' => 'icing',
'database' => 'dev'
);
var $offsite = array(
'driver' => 'mysql',
'persistent' => false,
'host' => '11.22.33.44', // or whatever
'login' => 'cake',
'password' => 'frosting',
'database' => 'live'
);
}
- 在你的控制器它們之間切換/模型就是事情變得有點緊張,這取決於複雜您的情況:
// Model::getDataSource()->configKeyName holds whichever db config you're using
if ($this->Model->getDataSource()->configKeyName != 'default') {
// do something, for example, change models, tables, reload schema, etc.
$this->loadModel('Special')
$this->Model->table = 'extras';
$this->Model->schema(true);
} else {
// predictably, Model::setDataSource($configKey) changes configs
$this->Model->setDataSource('offsite');
}
- 如果這是你的意思,我可以粘貼一段代碼,我寫了幾個星期前,我需要保存一個ajax表單提交(以2個階段形式完成),以3個表在2個數據庫中(一個服務於我的Cake應用程序,另一個服務於傳統的Cod eIgniter應用程序)展示了所有這些花哨的步法以及一些優秀的老式Cake魔術連接保存/更新快捷鍵。 (我還必須生成有選擇的電子郵件,並最終發出REST請求,將新插入的記錄的ID傳遞給CI應用程序以觸發其處理。)
無論如何,HTH。 :)
非常感謝您的幫助!我已經做了你所說的更改,但是現在我從ajax請求中獲得了404錯誤。我更接近讓它工作,這要歸功於你,還有什麼想法404可能會降低到什麼程度?回覆。 3)你絕對正確,它不是很蛋糕,我完全忘了自定義的sql語句 - 我將自定義sql看作是一個標誌,我做錯了,現在我不需要使用它!也是你的權利,即時通訊使用JQuery和蛋糕1.3。 – Alex 2011-06-09 16:20:37
Np。錯誤404通常表示某些內容已關閉 - 可能是權限,還是錯字路由?否則Cake會丟失Controller/Action/View/whatever。任何時候Cake都會咳嗽一個404,我直接去看我的錯誤日誌 - 首先是Cake,然後是Apache的 - 看看它試圖拉取什麼。檢查所有權/權限,查找文件/類名中的錯別字,所有小東西。如果您使用Auth,請將您的ajax控制器操作添加到允許的列表中。 Cake的debug()是一個救生員,沒有什麼比FirePHP(整合Cake)更好的調試蛋糕ajax問題。 – OpenSorceress 2011-06-09 16:53:50
你是救星和英雄!我有一個愚蠢的網址問題,給了我404。非常感謝。 – Alex 2011-06-09 16:58:50