sql >> データベース >  >> RDS >> Mysql

更新中にyii2の配列オブジェクトから複数選択値を設定する方法

    これは、モデルクラスPermitのサンプルコードです。 many to manyがあります Activityとの関係 PermitActivityを介して (ピボットテーブルモデル)。

    モデルクラスアクティビティ

    public class Permit extends \yii\db\ActiveRecord {
        public $activities_ids;
        ...
        public function rules() {
            return [
                ...
                [['activities_ids'], 'safe'],
                ...
            ];
        }
        ...
        // Method called after record is saved, be it insert or update.
        public function afterSave($insert, $changedAttributes) {
            // If this is not a new record, unlink all records related through relationship 'activities'
            if(!$this->isNewRecord) {
                // We unlink all related records from the 'activities' relationship.
                $this->unlinkAll('activities', true);
                // NOTE: because this is a many to many relationship, we send 'true' as second parameter
                // so the records in the pivot table are deleted. However on a one to many relationship
                // if we send true, this method will delete the records on the related table. Because of this,
                // send false on one to many relationships if you don't want the related records deleted.
            }
    
            foreach($this->activities_ids as $activity_id) {
                // Find and link every model from the array of ids we got from the user.
                $activity = Activity::findOne($activity_id);
                $this->link('activities', $activity);
            }
    
            parent::afterSave($insert, $changedAttributes);
        }
        ...
        // Declare relationship with Activity through the pivot table permitActivity
        public function getActivities(){
            return $this->hasMany(Activitiy::className(), ['id' => 'activity_id'])
                ->viaTable('permitActivity',['permit_id' => 'id']);
        }
        ...
        public function afterFind(){
            parent::afterFind();
            $this->activities_id = ArrayHelper::getColumn($this->activities, 'id');
        }
    }
    

    このように、モデルクラスは、ピボットテーブルを使用して関係を作成および更新する役割を果たします。

    最も重要なことは、リレーションシップメソッドを正しく宣言することです。

    編集

    これは、 kartikv\widgets\Select2を使用したビューの例です。 。 dropDownListが複数の選択をサポートしているかどうかはわかりませんが、Select2には非常に多くの便利な機能があり、通常は他のオプションよりも使用します。

    echo $form->field($model, 'activities')->widget(Select2::classname(), [
        'data' => $data,
        'options' => [
            'placeholder' => '...'
        ],
        'pluginOptions' => [
            'allowClear' => true,
            'multiple' => true,
        ],
    ]);
    



    1. Postgres:制約がまだ存在しない場合は制約を追加します

    2. SQLite JSON_GROUP_ARRAY()

    3. DB、php、およびhtml表示用の日本語に最適な文字エンコードはどれですか?

    4. 12cデータ編集