以下は、私が持っている3つのテーブル間の関係です。
これで、user/create アクションによって新しいユーザーを作成するときに、フォームはユーザー テーブル フィールドとユニット名の両方の入力を受け取ります。ここでのユニット名はドロップダウンではなく (それを使用することはオプションではありません)、テキストフィールドです。フォームに入力されたユニット名がユニット テーブルに存在しない場合は、それをユニット テーブルに挿入し、関係/参照を user_unit テーブルに保存する必要があります。存在する場合は、user_unit テーブルを更新するだけです。User モデルで unitname プロパティを宣言し、それをフォームに関連付けて、コントローラーで入力されたユニット名がユニットテーブルに存在するかどうかを確認することで、それを機能させることができます。存在する場合は、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'),
);