由于我的代码一半有效,因此很难解释。
基本上这就是我所拥有的:
public function add() {
$this->set('branchingQuestions', $this->BranchingQuestion->find('all'));
if ($this->request->is('post')) {
$_POST['data']['Job']['branchingQuestions'] = mysql_escape_string(serialize($_POST['data']['Job']['branchingQuestions']));
var_dump($_POST['data']['Job']);
//die;
$this->Job->create();
if ($this->Job->save($this->request->data)) {
$this->Session->setFlash(__('The job has been saved.'));
return $this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The job could not be saved. Please, try again.'));
}
}
}
这是在 Cake PHP 控制器中。大多数代码都是通过 Bake 生成的。
无论如何,在我的 POST 数组中是另一个名为 branchingQuestions 的数组,因为它是一个数组,所以在插入时会出现您所期望的错误。然而,从 var_dump 我得知该数组已成功序列化,现在是一个字符串,与 POST 的其余内容相同。所以它应该工作。
然而,通过测试一些事情,CakePHP 似乎甚至没有意识到我已经使用序列化行更新了数组。即使我的 var_Dump 另有建议,它也好像从未发生过一样。
['data']['job'] 包含我所有的字符串和 int,例如 ['data']['job']['title'] 并且它们可以很好地插入,但是为了测试我的理论,我还更改了 ['title '] 像这样:
$_POST['data']['Job']['title'] = 120;
哪个应该让 SQL 给出错误,因为标题是一个字符串。但它甚至没有改变标题在我的表中仍然是“测试”。
branchingQuestions 是这样发布的:
<select name='data[Job][branchingQuestions][question" + branchCount + "]'
我有一个动态表单,您可以在需要时添加更多选择框,这就是为什么我在问题部分有一个变量。所有这些工作正常,var_dump 给了我我所期望的。