0

CakePHP 関数の SaveMany 呼び出しに問題があります。

以下のコードは私の現在の試みです。これでうまくいくようになりました。エラーはまったく発生しませんが、savefield だけがデータを保存します。

助けてください???

             $InvoiceArrayData = array(
                      array('Invoicedata' => array('workdes' => $WorkHolder)),
                      array('Invoicedata' => array('price' => $PriceHolder)),
            );


            foreach($InvoiceArrayData as $InvoiceArrayKey => $InvoiceArrayValue) {
                debug($InvoiceArrayValue); 
                $this->Invoicedata->saveMany($InvoiceArrayValue['Invoicedata']);

                $this->Invoicedata->saveField('invoicejoblists_id', $MyJobIDInput);

                $this->Invoicedata->saveField('invoicejoblists_id', $MyJobIDInput);
                $this->Session->setFlash('Invoice Data Saved', 'default', array(), 'good');
                //$this->redirect($this->Auth->redirect('/AdminInvoiceSystem/'));
            }

コードが実行されると、保存されたメッセージでリダイレクトされますが、データベースがチェックされると、invoicejoblist_id のみが保存されます。

正しいことをしていませんか?

グレン

アップデート ::

さて、私がやろうとしているのは、請求システムを構築することです.「id、workdes、price、invoicejoblists_id」が含まれる「invoicedatas」のテーブルがいくつかあります。ID がキーで、自動カウントに送信されます。

ユーザーが新しい請求書の作成を開始すると、他のテーブルに保存されるフォームに記入します。ただし、このフォームでも、作業の詳細とその作業の価格を入力します。

これは、現在取り組んでいる関数に送信され、エラーは返されませんが、保存されません。または、saveMany 呼び出しが機能しないと言うべきです。saveField が機能し、他のテーブルの 1 つから呼び出した ID 番号を保存します。

追加するのを忘れたコードは var です。これは、保存しようとしている $this->data の基本的なホルダーです。

       $WorkHolder = $this->data['workdes'];
   $PriceHolder = $this->data['price'];

助けてください......

グレン。

OK では、自分自身をもっと詳しく説明できるか試してみます。

私は自分の仕事をやり直して、UI を別に計画しやすくするつもりです。説明するために、請求ジョブを設定するフォームを作成します。たとえば、ユーザーごとのジョブ番号、ユーザー ID、およびその他のビットです。この情報は、テーブル コールのinvoicejoblist に入ります。

2番目のテーブルinvoicedataには、workdesとpriceだけがinvociejoblists_idとともに保持されます(これにより、各行が請求書ジョブの詳細にリンクされます)。

しかし、私が何をしても、ワークデスと価格に保存することはできません。これは私の現在のテスト設定がどのように見えるかです:

私の .cpt ファイル:

$InvoiceMake = $this->Form->create('Invoice', array('url'=>'/InvoiceSet/', 'id' => 'InvoiceSet', 'inputDefaults' => array('div' => false) ) );
$InvoiceMake .= "<div id=\"InvoiceDataInput\">Please Input Description<br />";  
    $InvoiceMake .= $this->Form->textarea('Invoicedata.0.workdes');
    $InvoiceMake .= $this->Form->textarea('Invoicedata.1.workdes');
    $InvoiceMake .= $this->Form->textarea('Invoicedata.2.workdes');
    $InvoiceMake .= $this->Form->textarea('Invoicedata.3.workdes');
    $InvoiceMake .= $this->Form->textarea('Invoicedata.4.workdes');
    $InvoiceMake .= "</div>";
    $InvoiceMake .= $this->Form->submit('Make Invoice', array('div' => false, 'class' => 'ButtonInvoice'));
 $InvoiceMake .= $this->Form->end();
echo $InvoiceMake;

コントローラーの私のテスト機能:

function test() {
    debug($this->data); 
    $HoldeME = $this->data;
    $this->loadModel('Invoicedata');
            $this->Invoicedata->saveAll($HoldeME);
}

これらはエラーを返しませんが、送信された workdes 情報は保存されません。私がモデルに入れた唯一のものは次のとおりです。

public $belongsTo = array(
    'Invoicejoblists' => array(
        'className' => 'Invoicejoblists',
        'foreignKey' => 'invoicejoblists_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
);

入力が空でないことを確認するためにいくつかのチェックを行いましたが、それらを削除して、それが私の問題であるかどうかを確認しました。それが正しいかどうかはわかりませんでした。

よりよく説明されていることを願っています。データセットをテスト保存するために適切な基本レベルに下がったのですが、それでもできません。それは、モデルに何かが必要だからですか?

どんな助けでも大歓迎

グレン。

4

1 に答える 1

1

あなたが何を求めているのか本当にわかりませんが、盲目的にしています。

アイテムと、必要な数のサブ/関連アイテムを 1 つの .xml ファイルに保存できる必要がありますsaveAll()

フォーム (またはデータ) が、 CakePHP bookにある多くの指示に従って正しくフォーマットされていることを確認してください。

例として:

echo $this->Form->create('Invoice');
echo $this->Form->input('name');
echo $this->Form->input('Price.0.amount');
echo $this->Form->input('Price.1.amount');
echo $this->Form->end('Submit');

次に、saveAll()(またはsaveMany()-何でも)を実行すると、請求書と2つの価格が保存されます(Invoiceがに関連していると仮定しますPrice)。

手動でデータを作成しようとしているが、どのようにフォーマットするべきかわからない場合は、いつでも上記のようなフォームを作成して送信しdebug()、結果を見て CakePHP がどのようにフォーマットするかを確認できます。

明確にするのに役立つことを願っています。

于 2013-06-24T21:01:51.553 に答える