0

Cakephp2.3を使用しています

私は以下の表を持っています

表1:ユーザー
ここにフィールドgroup_idと他のフィールドがあります表2:グループ表3:学生

ここにフィールドuser_idがあります

表4:保護者

user_idを提出しました

そしてstudent_guardians

ここで、フィールドguardian_id、student_id、relationship_idがあります。

他のテーブルには、firstname、lastnameなどの他のフィールドがあります。

アソシエーションを作成するためにケーキベイクを使用しました

学生からのすべてのデータを入力したい/ページを追加したい。保護者のように(学生は1つのフォームに複数のガーディアンを入力して詳細を送信できます)

次のようにビューを作成しました

<div class="guardianStudents form">
<?php echo $this->Form->create('GuardianStudent'); ?>
    <fieldset>
        <legend><?php echo __('Add Guardian Student'); ?></legend>
    <?php
        echo $this->Form->input('Student.first_name');
        echo $this->Form->input('Guardian.0.Guardian.first_name');
        echo $this->Form->input('Guardian.0.Guardian.last_name');
        echo $this->Form->input('Guardian.0.User.username');
        echo $this->Form->input('Guardian.0.User.password');
        echo $this->Form->input('Guardian.0.User.group_id',array('type'=>'text','value'=>'1'));

        echo $this->Form->input('Guardian.1.Guardian.last_name');
        echo $this->Form->input('Guardian.1.Guardian.last_name');
        echo $this->Form->input('Guardian.1.User.username');
        echo $this->Form->input('Guardian.1.User.password');
        echo $this->Form->input('Guardian.1.User.group_id',array('type'=>'text','value'=>'1'));


        echo $this->Form->input('Student.User.group_id',array('type'=>'text','value'=>'1'));
        echo $this->Form->input('Student.User.username');
        echo $this->Form->input('Student.User.password');   
       ?>
    </fieldset>
<?php echo $this->Form->end(__('Submit')); ?>
</div>
<div class="actions">
    <h3><?php echo __('Actions'); ?></h3>
    <ul>

        <li><?php echo $this->Html->link(__('List Guardian Students'), array('action' => 'index')); ?></li>
        <li><?php echo $this->Html->link(__('List Guardian Relationships'), array('controller' => 'guardian_relationships', 'action' => 'index')); ?> </li>
        <li><?php echo $this->Html->link(__('New Guardian Relationship'), array('controller' => 'guardian_relationships', 'action' => 'add')); ?> </li>
        <li><?php echo $this->Html->link(__('List Students'), array('controller' => 'students', 'action' => 'index')); ?> </li>
        <li><?php echo $this->Html->link(__('New Students'), array('controller' => 'students', 'action' => 'add')); ?> </li>
        <li><?php echo $this->Html->link(__('List Guardians'), array('controller' => 'guardians', 'action' => 'index')); ?> </li>
        <li><?php echo $this->Html->link(__('New Guardian'), array('controller' => 'guardians', 'action' => 'add')); ?> </li>
    </ul>
</div> 

コントローラー関数では、addは

public function add() {
        if ($this->request->is('post')) {
            $this->GuardianStudent->create();
            $this->loadModel('User');

            if ($this->GuardianStudent->saveAll($this->request->data['Guardian'])) {    
                $this->Session->setFlash(__('The guardian student has been saved'));
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('The guardian student could not be saved. Please, try again.'));
            }
        }

}

そしてそれはデータを保存しません

上記のすべてのコードは、student_guradiansコントローラーで記述されています。

誰もがこのデータのvarダンプを達成する方法を知っていますか

array(2) { ["Student"]=> array(2) { ["first_name"]=> string(5) "jkjkj" ["User"]=> array(3) { ["group_id"]=> string(1) "1" ["username"]=> string(10) "klklfkfkkl" ["password"]=> string(6) "lklklk" } } ["Guardian"]=> array(2) { [0]=> array(2) { ["Guardian"]=> array(2) { ["first_name"]=> string(5) "jkjkj" ["last_name"]=> string(8) "kjkjkjkj" } ["User"]=> array(4) { ["username"]=> string(7) "kjkjkjk" ["password"]=> string(7) "kjkjjkk" ["group_id"]=> string(1) "1" ["name"]=> string(1) "1" } } [1]=> array(2) { ["Guardian"]=> array(1) { ["last_name"]=> string(6) "jkkjkj" } ["User"]=> array(4) { ["username"]=> string(10) "jkljjljjkl" ["password"]=> string(6) "kjkjkj" ["group_id"]=> string(1) "1" ["name"]=> string(1) "1" } } } }

ありがとう

4

1 に答える 1

0

ノート

これは答えではないことを認識していますが、「コメント」に入れるには情報が多すぎます

IMO の設計/ロジックに欠陥があります。1 人の生徒が複数のガーディアンを持つことができ、1 人のガーディアンが複数の生徒のガーディアン (HABTM) になることができるように、データベースを設計しました。これは正しいようで、論理的に聞こえます。

ただし、学生が追加されると同時にガーディアンの詳細を入力できるようにフォームを設計しました。これにより、(すべてが正常に機能する場合) 常に新しいガーディアンがデータベースに挿入されます。すでにデータベースに存在していました。このため、基本的に、「HABTM」として「保存」されていますが、生徒とそのガーディアンの間に「hasMany」関係を作成しました。

ガーディアンの詳細をフォームに入力すると、新しいガーディアンが挿入され、既存のガーディアンと同じ詳細 (name、last_name) が含まれる可能性がありますが、異なるid.

これにより、いくつかのオプションが残ると思います。

  1. 新しい生徒を追加するときは、選択する既存の保護者を含むチェックボックス (または複数選択) のリストを提示します。データベースに存在するガーディアンの数によっては、適切なガーディアンを簡単に選択できるように「カスタム」フォーム要素を作成する必要がある場合があります。そうしないと、このリストが非常に長くなる可能性があります
  2. ガーディアンの姓名のみを保存し、ガーディアンを複数の生徒で共有する必要がない場合 (つまり、ガーディアンの名前を変更すると、そのガーディアンに「関連付けられている」すべての生徒の名前が変更されます)。 、関係を hasMany/belongsTo 関係に変換する方がよい場合があります。たとえば、ガーディアンは 1 人の生徒にのみ関連付けられます。

いずれの場合も、適切なガーディアンを一意に識別するには、ガーディアンの名/姓だけで十分かどうか自問してください。結局のところ、ガーディアンは同じ名前を共有している可能性があり、複数の生徒のガーディアンの詳細を変更してしまいたくありませんが、実際には同じ人物ではなく、同じ名前しか持っていません。

于 2013-03-02T10:37:22.900 に答える