Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak ustawić wartość wielokrotnego wyboru z obiektu tablicy w yii2 podczas aktualizacji?

To jest przykładowy kod klasy modelu Permit który ma many to many związek z Activity przez PermitActivity (model ze stołem obrotowym).

Modelowanie zajęć

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');
    }
}

W ten sposób klasa modelu jest odpowiedzialna za tworzenie i aktualizowanie relacji przy użyciu tabeli przestawnej.

Najważniejszą rzeczą jest prawidłowe zadeklarowanie metody relacji.

Edytuj

To jest przykład widoku z użyciem kartikv\widgets\Select2 . Naprawdę nie wiem, czy dropDownList obsługuje wielokrotne zaznaczanie, jednak Select2 ma tak wiele przydatnych funkcji, że zwykle używam go zamiast innych opcji.

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. Czy SQL Server 2005 ma odpowiednik typu danych ENUM w MySql?

  2. MySQL:dlaczego działa maksymalna liczba N członków na zapytanie grupowe?

  3. Konfiguracja Solr DataImportHandler

  4. Fałszywe ograniczenie klucza obcego nie działa

  5. Znacznik czasu utworzenia wiersza i ostatniej modyfikacji