以下是我拥有的三个表之间的关系。
现在,在通过 user/create 操作创建新用户时,表单会同时输入用户表字段和单位名称。这里的单位名称不是下拉列表(使用它不是一个选项),而是一个文本字段。如果表格中输入的单位名称在单位表中不存在,我需要将其插入单位表中,然后将关系/引用保存在 user_unit 表中。如果它存在,我只需更新 user_unit 表。我可以通过在 User 模型中声明 unitname 属性然后将其与表单相关联来使其工作,然后在控制器中检查输入的单元名称是否存在于单元表中。如果存在,则更新 UserUnit 模型,如果不存在,则创建该单元,然后更新 UserUnit。它可以工作,只是在更新记录时我无法将单位名称与表单相关联。userunit 关系是一个 HAS_MANY 关系,我想这在这里造成了一些问题。谁能建议我如何解决它?
这是用户/创建操作
$model = new User;
$modeluserunit = new UserUnit;
$user_group=Yii::app()->user->group;
if(isset($_POST['User']))
{
$model->attributes=$_POST['User'];
//$modeluserunit->attributes=$_POST['UserUnit'];
$valid=$model->validate();
if($valid)
{
if($model->save(false))
{
$Userunitmodel = Unit::model()->findByAttributes(array('name'=>$model->unitplaceholder,'groupId'=>$user_group));
if (count($Userunitmodel)!=0)
{
$modeluserunit->UserId = $model->id;
$modeluserunit->unitId = $Userunitmodel->id;
if ($modeluserunit->save())
{
Yii::app()->user->setFlash('success', "User created!");
$this->redirect(array('view','id'=>$model->id));
}
}
else if (count($Userunitmodel)==0)
{
$unitmodel = new Unit;
$unitmodel->name=$model->unitplaceholder;
$unitmodel->communityId=$user_group;
if ($unitmodel->save())
{
$modeluserunit->UserId = $model->id;
$modeluserunit->unitId = $unitmodel->id;
if ($modeluserunit->save())
{ Yii::app()->user->setFlash('success', "User created!");
$this->redirect(array('view','id'=>$model->id));
}
}
}
}
}
}
$this->render('create', array(
'model'=>$model,
'modeluserunit'=>$modeluserunit,
));
用户/更新操作
$model=$this->loadModelupdate($id);
if(isset($_POST['User']))
{
$model->attributes=$_POST['User'];
if($model->save())
Yii::app()->user->setFlash('success', "User updated!");
$this->redirect(array('view','id'=>$model->id));
}
$this->render('update',array(
'model'=>$model,
));
和 loadModel 函数
$criteria=new CDbCriteria();
$criteria->compare('t.id',$id);
$criteria->compare('unit.groupId',Yii::app()->user->group);
$model = User::model()->with(array('UserUnits' => array('with' => 'unit')))->find($criteria);
if($model===null)
throw new CHttpException(404,'The requested page does not exist.');
return $model;
用户模型中的关系
return array(
'userUnits' => array(self::HAS_MANY, 'UserUnit', 'userId'),
);