2

私はこの$data配列を持っています:(フォームではなくシェル上に構築されています)

(ここでデバッグ)

array(
(int) 0 => array(
    (int) 0 => 's511013t',
    (int) 1 => 'id3422',
    (int) 2 => '1'
),
(int) 1 => array(
    (int) 0 => 's511013t',
    (int) 1 => 'id3637',
    (int) 2 => '1'
)
)

そしてsaveManyを使用する:

$this->Dir->saveMany($data, array( 'validate' => 'false', 'fieldList' => array('name','dir_dataname', 'project_id'))); 

保存はエラーなしで失敗します。

$ data配列が適切にフォーマットされているかどうかはわかりませんが(別のレベルが必要かどうか混乱しています)、SQL選択などから構築しました。ただし、保存する必要のあるすべての情報、単一モデルが含まれています。

私はこれらすべてをシェルから実行していますが、フィールド名が毎回提供されると、単一のレコードを保存するように機能します。

// this works
$this->Dir->save(array('name' => $data[0][0], 'project_id' => $data[0][2], 'dir_dataname' => $data[0][1]));

すでに「データの保存」を読んでいます。カスタムの$data形式のため、saveManyとfieldListを使用したいと思います。($ dataにフィールド名を挿入する必要はありません)。
(シェルタスクから取得するのはかなり面倒なので、表示するsql_dumpはありません)

私はそれを理解するために一晩中過ごしました、あなたは私を正しい方向に向けることができますか?

4

2 に答える 2

2

私見、各配列のキーはデータベーステーブルの有効なフィールドではありません。これらは、テーブル フィールドと同じ名前を表す必要があります。SQL から配列を作成すると、出力は次のようになります。連想配列です。

array(
(int) 0 => array(
    (string) name => 's511013t',
    (string) dir_dataname => 'id3422',
    (string) project_id => '1'
),
(int) 1 => array(
    (string) name => 's511013t',
    (string) dir_dataname => 'id3637',
    (string) project_id => '1'
)
)

Cake2.0 ドキュメント

$this->Dir->saveMany($data);
于 2012-06-16T12:15:47.840 に答える
0

経由でログを取得できます

debug($this->Dir->getDataSource()->getLog());

使い方をfieldList間違っているようです。fieldList使用しているような「マッピング」ではなく、データベースに保存するためにホワイトリストに登録されるフィールドのリストです。

field => value数値インデックスではなく、各レコードの配列でペアを指定する必要があります。私は間違っているかもしれませんが、私はそれを見たことがなく、ドキュメントによるとそのようには見えません。

于 2012-06-16T05:07:35.523 に答える