سؤال

أنا جديد جدًا على الكعكة وكنت أتساءل كيف سأتمكن من إنشاء مستخدم جديد وأيضًا إنشاء تفاصيل الاتصال

قاعدة البيانات مثل ذلك

المستخدمين

  • معرف المستخدم
  • contact_detail_id
  • كلمة المرور
  • معرف_الدور
  • اسم المستخدم

بيانات المتصل

  • contact_detail_id
  • العنوان 1
  • العنوان 2

والعديد من المجالات الأخرى

في نموذج المستخدم قمت بتعيين public $hasOne = array('ContactDetail');

نظرًا لأن المستخدم سيكون لديه تفاصيل اتصال واحدة

الآن ما أريد معرفته هو كيف سيتم حفظ هذا في طريقة الإضافة كما قال الكثيرون لاستخدام الحفظ المرتبط على الرغم من أن هذا لا يبدو أنه يعمل.

طريقة عرض الإضافة هكذا وهذا صحيح حسب فهمي

<?php echo $this->Form->create('User', array('action' => 'add')); ?>
    <fieldset>
        <legend><?php echo __('Add User'); ?></legend>
    <?php
        echo $this->Form->input('User.username');
                echo $this->Form->input('User.password');
                echo $this->Form->input('roles');

                echo $this->Form->input('ContactDetail.name');
                echo $this->Form->input('ContactDetail.surname');
                echo $this->Form->input('ContactDetail.address1');
                echo $this->Form->input('ContactDetail.address2');
                echo $this->Form->input('ContactDetail.country');
                echo $this->Form->input('ContactDetail.email');
                echo $this->Form->input('ContactDetail.fax');


          ?>      
                <label>Are you interested in buying property in Malta?</label>
          <?php  
                $interest_buy = array('0'=>'no','1' => 'yes');
                echo $this->Form->input('ContactDetail.interest_buy_property',array('type'=>'radio','options'=>$interest_buy,'value'=>'0','legend'=>FALSE));
          ?>      
                <label>Are you interested in renting property in Malta?</label>
          <?php  
                $interest_rent = array('0'=>'no','1' => 'yes');
                echo $this->Form->input('ContactDetail.interest_rent_property',array('type'=>'radio','options'=>$interest_rent,'value'=>'0','legend'=>FALSE));
                echo $this->Form->input('ContactDetail.mobile');
                echo $this->Form->input('ContactDetail.phone');
                echo $this->Form->input('ContactDetail.postcode');
                echo $this->Form->input('ContactDetail.town');

                echo $this->Form->input('ContactDetail.newsletter',array('type'=>'checkbox','label'=>'Would you like to register for the newsletter?' ,'checked'=>'1','legend'=>FALSE,));
         ?>       

    </fieldset>
<?php echo $this->Form->end(__('Submit')); ?>
هل كانت مفيدة؟

المحلول

يرجى الاطلاع على شرح آرون حول ما يجب وضعه في النموذج الخاص بك أولاً وبعد ذلك، يمكنك استخدامه $this->User->saveAll();أو $this->User->saveAssociated(); لحفظ كلا الجدولين في نفس الوقت.

إذا كنت تريد حفظ ContactDetail أولاً ثم حفظ المستخدم، فيمكنك القيام بهذا الخيار الثاني، ولكن لا يوصى به.

 $this->User->ContactDetail->create(); 
 $this->User->ContactDetail->save($this->request->data);`
 this->request->data['User']['contact_detail_id'] = $this->User->ContactDetail->id`;
 $this->User->Create();
 $this->User->save($this->request->data);`

لكني أفضل الخيار الأول، لتجربة الخيار الأول مرة أخرى،

ملحوظة:تأكد من وجود ContactDetail وعلاقة المستخدم في النموذج مثل هذا في نموذج المستخدم

public $hasOne= array(
    'ContactDetail'   => array(
        'className' => 'ContactDetail',         
        'foreignKey' => 'contact_detail_id'
    )
);

نأمل أن يساعد.

نصائح أخرى

في النظرة الأولى إلى قاعدة البيانات الخاصة بك، يجب عليك استخدام بنية قاعدة البيانات التالية، وهذا سيساعدك في مزيد من الاتجاهات:

User Model

id
username
password
role_id

ContactDetail Model

id
user_id
address1
address2

يُعرِّف hasMany العلاقة النموذجية في User نموذج مع ContactDetail يحب:

$hasMany => array('ContactDetail');

الآن قم بملء مجموعة من تفاصيل الاتصال باستخدام (id => address1) الزوج باستخدام:

$this->ContactDetail->find('list', array('conditions' => array('user_id' => $user_id)),
                                         'fields' => array('ContactDetail.id', 'ContactDetail.address1')));

الآن لحفظ التفاصيل المرتبطة، استخدم حفظ الطريقة المرتبطة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top