Php 尝试从多个选择中保存hasMany数组
我正在尝试保存来自多个选择的数据。当“Request”有多个“Requestc”时,该数据是相关的。foriegnKey是“request\u id” 我的控制器:Php 尝试从多个选择中保存hasMany数组,php,arrays,cakephp,cakephp-2.0,Php,Arrays,Cakephp,Cakephp 2.0,我正在尝试保存来自多个选择的数据。当“Request”有多个“Requestc”时,该数据是相关的。foriegnKey是“request\u id” 我的控制器: if ($this->request->is('post')) { $solicitacao = $this->Request->save($this->request->data['Request']); //Verifica se a request foi salva e
if ($this->request->is('post')) {
$solicitacao = $this->Request->save($this->request->data['Request']);
//Verifica se a request foi salva e se sim, salva quais as certidões foram pedidas na tabela requests_certidoes
if(!empty($solicitacao)) {
$this->request->data['Requestc']['request_id'] = $this->Request->id;
// debug($this->request->data);
$this->Request->Requestc->saveAll($this->request->data);
}
}
这是我的数据,来自$This->request->data
:
array(
'Request' => array(
'motivo' => 'Licitação',
'nome_licitacao' => '',
'data_pregao' => '',
'nome_cliente' => '',
'outros' => ''
),
'Requestc' => array(
'caminho' => array(
(int) 0 => '1',
(int) 1 => '3'
),
'request_id' => '60'
)
)
这就是错误:
错误:SQLSTATE[42S22]:未找到列:“字段列表”中的1054未知列“数组”
SQL查询:插入到societario
requests\u certidoes
(caminho
,request\u id
)值(数组,62)
感谢您所做的一切您需要修改发布的数据,使其看起来像这样:
array(
'Request' => array(
'motivo' => 'Licitação',
'nome_licitacao' => '',
'data_pregao' => '',
'nome_cliente' => '',
'outros' => ''
),
'Requestc' => array(
0 => array(
'caminho' => '1',
// --> optionally add your request_id here
// if you're manually saving Requestc
// AFTER saving Request
),
1 => array(
'caminho' => '3',
)
)
)
如果您的关系设置正确,您可能不必添加请求id
$data = array(
'Request' => $this->request->data['Request'],
'Requestc' => array();
);
foreach($this->request->data['Requestc']['caminho'] as $val) {
$data['Requestc'][] = array(
'caminho' => $val,
// Should NOT be nescessary when using the saveAssociated()
// as below
//'request_id' => $this->Request->id;
);
}
// This should insert both the Request *and* the Requestc records
$this->Request->saveAssociated($data);
请参阅文档:
但是,如果
Requestc.caminho
存储证书的id
,这似乎是一种HABTM关系<代码>请求-->HABTM-->证书
,在这种情况下,联接表应被称为certificates\u requests
,并包含列Request\u id
和Certificate\u id
。请参见是,我的请求c。卡米尼奥
选择证书的id
!!!在修改表名和列之后,我需要更改代码中的某些内容吗?我不明白…谢谢!!!我更改了列的名称,这是在保存请求\u id
,但在证书\u id
中不保存任何内容。没有错误,因为我反应晚了(可能是不同的时区),很高兴你能让它工作。仍然值得研究如何使用HABTM关系。但是要注意,如果要在join
表本身中存储其他数据。(certificates\u requests
),阅读本章:证书的可能副本