【问题标题】:Saving User and Detail rows with Cake 2.4.5使用 Cake 2.4.5 保存用户和详细信息行
【发布时间】:2014-02-24 23:00:25
【问题描述】:

我对蛋糕很陌生,我想知道如何创建新用户并创建联系方式

数据库是这样的

用户

  • user_id
  • contact_detail_id
  • 密码
  • role_id
  • 用户名

Contact_Details

  • contact_detail_id
  • 地址1
  • 地址2

和许多其他领域

在用户模型中,我分配了 public $hasOne = array('ContactDetail');

因为用户会有一个联系方式

现在我需要知道的是,如何将它保存在 add 方法中,正如许多人所说的使用 saveassociated,尽管这似乎不起作用。

添加视图是这样的,据我了解这是正确的

<?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')); ?>

【问题讨论】:

    标签: cakephp cakephp-model cakephp-2.4


    【解决方案1】:

    请先查看 Arun 说明,了解要在模型中放入什么,然后,您可以使用 $this-&gt;User-&gt;saveAll();或$this-&gt;User-&gt;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'
        )
    );
    

    希望对你有帮助。

    【讨论】:

    • 我想知道如果我需要保存contact_detail 然后用户,我将如何保存,因为我不断收到错误完整性约束违规:1452 无法添加或更新子行:外键约束失败(@987654325 @.users, 约束 FK_users_contact_details 外键 (contact_detail_id) 引用 contact_details (contact_detail_id)
    • 我根据您的要求再次编辑了我的答案,尝试一下,如果有什么问题,请告诉我
    • 该部分现在似乎可以工作了我在 role_id 上遇到错误我正在像这样在添加//Populate roles dropdownlist $roles = $this->User->Role->find 中填充它('list',array('order'=>'role')); $this->set(compact('roles'));然后当我要保存时,我尝试了这个 $this->request->data['User']['role_id'] = $roles->data;但它说违反完整性约束:1048 Column 'role_id' cannot be null
    • 好吧,我刚才说的 $belogsto 设置不正确,因此绑定没有正确完成。现在我必须看看为什么 aro 会抛出错误。 AclNode::node() - 找不到由“Array ([Aro0.model] => Role [Aro0.foreign_key] => )”标识的 Aro 节点
    • 我已接受您的回答,因为从技术上讲,它解决了我的问题,您可以救命。非常感谢。
    【解决方案2】:

    在第一次查看你的数据库时,你应该使用以下数据库结构,这将帮助你更多的方向:

    User Model

    id
    username
    password
    role_id
    

    ContactDetail Model

    id
    user_id
    address1
    address2
    

    User 模型中定义hasMany 模型关系与ContactDetail 类似:

    $hasMany => array('ContactDetail');
    

    现在使用(id =&gt; address1) 对填充一组联系人详细信息:

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

    现在要保存关联的详细信息,请使用SaveAssociated Method

    【讨论】:

    • 我的是 hasOne 我也认为蛋糕文档帮助很大,谢谢我现在知道该去哪里了。
    • 除了保存之外,我几乎所有东西都在工作。我需要先保存联系人详细信息,然后再保存用户,从用户添加中。
    猜你喜欢
    • 1970-01-01
    • 2017-03-08
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多