CakePHP hasOne属于关系,编辑/添加相同的动作

时间:2013-06-04 16:40:53

标签: php mysql cakephp cakephp-2.3

使用CakePHP 2.3。我正在创建一个应用程序,其中有一个Users表和一个Profiles表。该关联是这样的:用户hasOne个人资料/个人资料属于用户。

但是,我不希望用户有权添加他们的个人资料,因为这可能会生成他们个人资料的副本。我想要一个动作来编辑允许用户使用的ONE配置文件。

有没有办法使用user_id和id启动配置文件,但添加用户时所有其他字段都为空?这样,用户将自动拥有与注册相关联的配置文件,所需的只是编辑操作以填充空白字段。

如果我能以某种方式使配置文件表中的id和user_id具有相同的数字,那么它在CakePHP中会更加清晰。请注意,我还需要限制用户仅编辑其个人资料。

现在没有代码,只是希望你对此做出策略的意见,谢谢!

1 个答案:

答案 0 :(得分:1)

您可以在创建用户时创建个人资料,只需执行

//your code for user saving
if($this->User->save())
   $this->User->Profile->save(array('user_id'=>$this->User->id))

或者tada和tada的变体,保存空白配置文件。

事实上,如果您确定总是想要将配置文件添加到最近创建的用户,则可以在用户模型的afterSave中执行此操作。

class User extends AppModel {
    public function afterSave($created) {
        //make sure to do it on creation and not on update
        if ($created) {
            $this->Profile->save(array('user_id'=>$this->getLastInsertID());
        }
    }
}

但请记住,如果您在个人资料模型中设置了验证,则会触发它们。假设您在配置文件中有一个列“作业”,该列不需要为空,然后会出现一些错误。您可以通过在验证过程中添加on选项来绕过它

class Profile extends AppModel {
public $validate = array(
    'job' => array(
        'notempty' => array(
            'rule' => array('notempty'),
            'message' => 'You have to have a job',
            'allowEmpty' => false,
            'required' => true,
                            'on' => 'update'
        )
    ),
            /* etc */
}

其他选择就是......不要那样做:) 如果您不希望用户添加疯狂的配置文件,您可以将其用户ID“硬编码”到配置文件中。例如,假设您在配置文件控制器中有一个添加操作

class ProfilesController extends AppController {

     public function add($user_id) {
         //lets assume you have the user id somewhere, maybe even get the logged session one

         if($this->request->is('post')) {
             //when you are saving, force the add (or edit) to be for the user_id, not anyone
             $this->request->data['Profile']['user_id'] = $user_id;
             $this->Profile->save();
         }
     }

在这里和那里有几个ifs,在创建用户之后不需要创建空白配置文件。但它也没有伤害......

如果您确定要在所有用户创建案例中添加空白配置文件,我个人喜欢afterSave选项。控制器中的代码较少,但您必须更加谨慎地使用配置文件验证。

哦,关于配置文件中的“相同id和user_id”...不要这样做。真的没有必要。通过简单的查找,您可以轻松获得用户及其配置文件,让蛋糕处理外键。