0

複数選択からデータを保存しようとしています。このデータは、"Request" hasMany "Requestc" の場所に関連付けられています。foriegnKey は「request_id」です

私のコントローラー:

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 クエリ: INSERT INTO societariorequests_certidoes( caminho, request_id) 値 (配列、62)

全てに感謝

4

1 に答える 1

2

投稿されたデータを次のように変更する必要があります。

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',
        )
    )
)

リレーションが適切に設定されている場合、おそらく request_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);

ドキュメントを参照してください:関連モデル データの保存 (hasOne、hasMany、belongsTo)

ただし、 の を格納する場合、Requestc.caminhoこれは HABTM 関係のようです。 この場合、結合テーブルを呼び出して、列とを含める必要があります。モデルとデータベースの規則を参照してくださいidCertificatesRequest --> HABTM --> Certificatecertificates_requestsrequest_idcertificate_id

于 2013-04-10T22:14:10.487 に答える