1

CakePHP バージョン 2.2.3

関連する 2 つのモデルを使用して、同じページに 2 つのフォームを保存したいと考えています。モデル 1 : 提案 hasOne クライアント モデル 2 : クライアントの属している提案

これが私の ProposalsController.php の admin_edit アクションです。

function admin_edit($id=null){
        $this->loadModel('Client');
        if ($this->request->is('put') || $this->request->is('Post')) {
            if (!empty($this->request->data)) {
        // Use the following to avoid validation errors:
                unset($this->Proposal->Client->validate['proposal_id']);
                //$this->Proposal->saveAssociated($this->request->data);
                //$this->redirect(array('action' => 'index'));
                debug($this->request->data);
            }
        }
        elseif($id){
            $this->Proposal->id = $id;
            $this->request->data = $this->Proposal->read();
        }

    }

CakePHP の本にある例を使用しました。

そして、ここに私のビュー admin_edit.ctp と 2 つのフォームがあります:

<hr/>
<h1>Proposition</h1>
<hr/>

<?php echo $this->Form->create('Proposal'); ?>

<?php echo $this->Form->input('Proposal.name', array('label' => "Nom de la proposition")); ?>
<?php echo $this->Form->input('Proposal.created', array('label' => "Date de création")); ?>
<?php echo $this->Form->input('Proposal.due', array('label' => "Date d'échéance")); ?>
<?php echo $this->Form->input('Proposal.content', array('label' => "Termes & conditions")); ?>
<?php echo $this->Form->input('Proposal.id'); ?>

<hr/>
<h1>Client</h1>
<hr/>

<?php echo $this->Form->input('Client.name', array('label' => "Nom du client")); ?>
<?php echo $this->Form->input('Client.project', array('label' => "Nom du projet")); ?>
<?php echo $this->Form->input('Client.address', array('label' => "Adresse")); ?>
<?php echo $this->Form->input('Client.phone', array('label' => "Téléphone")); ?>
<?php echo $this->Form->input('Client.email', array('label' => "Email")); ?>
<?php echo $this->Form->hidden('Client.proposal_id'); ?>
<?php echo $this->Form->input('Client.id'); ?>

<?php echo $this->Form->end('valider'); ?>

これも CakePHP の本から着想を得ています。

データは保存されますが、2 番目のフォームで保存されるNULLのは、クライアント テーブルの各列の " " 値だけです。しかし、デバッグ (リクエスト -> データ) すると、2 つのフォームに入力したすべてのデータが取得されます。それは変です。

私が正しくしていないのは何ですか?

いつもお世話になっております!

[編集] : この投稿を更新し、コードを修正しました。

4

2 に答える 2

0

私は現在自分のコンピューターにいないので、これを確認することはできませんが、

「hasMany」ではなく「hasOne」関係があるため、.0. 第二形態のネーミング。マニュアルの最初の例/説明を見てください。

http://book.cakephp.org/2.0/en/models/ Saving-your-data.html#model-saveassociated-array-data-null-array-options-array

したがって、2 番目のフォームの入力は次のようになります。

<?php echo $this->Form->input('Client.name', array('label' => "Nom du client")); ?>
于 2013-02-17T11:47:18.143 に答える
0

Client.0.name表記法を使用する必要があるのはhasManyリレーションシップのみであるため、次のように変更する必要があります。Client.name

于 2013-02-17T11:48:54.880 に答える