我最近创建了一个包含用户,mobile_accounts和paylists表的数据库。付费列表和mobile_accounts都链接回用户,并且都具有外来ID" user_id"。当我让用户创建自己的paylists或mobile_accounts时,我使用的是我在用户模型中创建的一个名为" addUserId"的函数。我在每个特定控制器(即paylists或mobile_accounts)中调用该函数,同时传入当前模型和user_id。这对我很好,但它似乎是一个解决方案。 在如何使用外键更新数据库方面,我是否遗漏了一些非常简单的内容?或者我将来必须继续创建这样的功能吗?
以下是薪资单控制器中的代码
public function actionCreate()
{
$model=new Paylist;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Paylist']))
{
$model->attributes=$_POST['Paylist'];
if($model->save())
// adds the current UserId to the table
User::model()->addUserId($model);
$this->redirect(array('view','id'=>$model->id));
}
$this->render('create',array(
'model'=>$model,
));
}
以下是用户模型中的代码
// adds the user id to your data table, takes in the user id and adds it to specified model
public function addUserId($model)
{
$accountid = $model->id;
$current_email = Yii::app()->user->getId();
// gets the current id of the user
$user = User::model()->findByAttributes(array('email'=>$current_email));
// extracts out the id of the current user
$user_id = $user->id;
$model->updateByPk($accountid,array('user_id'=>$user_id));
}
答案 0 :(得分:1)
您可以在模型中使用CActiveRecord::beforeSave()
方法:
public function beforeSave(){
if($this->isNewRecord){
User::model()->addUserId($this);
}
return parent::beforeSave();
}
并更改addUserId
方法:
public function addUserId($model)
{
$accountid = $model->id;
$current_email = Yii::app()->user->getId();
$user = User::model()->findByAttributes(array('email'=>$current_email));
$model->user_id = $user->id; ; // just set user_id attribute
}
此外,您可以在getCurrentUserId
模型中实现方法User
,该方法返回当前用户ID并在beforeSave
中调用此方法:
public function beforeSave(){
if($this->isNewRecord){
$this->user_id = User::getCurrentUserId();
}
return parent::beforeSave();
}