Mysql
 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Табло за обяви - Оптимизация на база данни

  2. Не може да се преобразува стойността за дата/час в MySQL в System.DateTime. Не може да се съхрани стойност 0/0/0000 0:00:00?

  3. Git bash на Windows 7. Командата mysqldump не работи

  4. Проблем с кодирането на символи

  5. Сортиране на нули последно