4

以下は、私が持っている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'),
        );
4

2 に答える 2

0

自宅でこれを試してください:

<? /*** stuff for your model User ***/

    // store all ids from rela Model
    public $selectedIds;


    public function relations() 
    {
    return array(
            'userUnits' => array(self::MANY_MANY, 'Unit', 'UserUnit(userId, unitId)','index'=>'id'),
        );
    }


    public function afterFind()
    {
        // "userUnits" is defined in relations()
        $this->selectedIds = array_keys($this->userUnits);
        parent::afterFind();
    }   



    ?>

ユーザー モデルが update-action 用に読み込まれると、割り当てられたすべてのグループ (ID) が $selectedIds に格納されます。したがって、それを反復処理して ActiveForm 入力を構築できます。

于 2015-01-27T16:42:58.577 に答える
0

この目的には、フォーム モデルを使用する必要があります。検証の最後に、ユーザーを作成し、指定された名前で新しいユニットを作成し、新しく作成されたユーザー ID とユニット ID を供給する新しい user_unit を作成します。

Yii Definitive Guide - ModelCFormModelをもっと読む。

于 2014-03-14T10:00:20.743 に答える