Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara menyetel nilai multi pilih dari objek array di yii2 saat memperbarui

Ini adalah contoh kode kelas model Permit yang memiliki many to many hubungan dengan Activity melalui PermitActivity (model tabel pivot).

Aktivitas Kelas Model

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

Dengan cara ini, kelas model adalah yang bertanggung jawab untuk membuat dan memperbarui hubungan menggunakan tabel pivot.

Yang paling penting adalah mendeklarasikan metode hubungan dengan benar.

Sunting

Ini adalah contoh tampilan menggunakan kartikv\widgets\Select2 . Saya tidak begitu tahu apakah dropDownList mendukung banyak pilihan, namun Select2 memiliki begitu banyak fitur berguna yang biasanya saya gunakan di atas opsi lain.

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. Bagaimana cara memberi tahu Pengoptimal MySQL untuk menggunakan indeks pada tabel turunan?

  2. tampilkan nilai basis data dalam bingkai modal hanya menampilkan catatan pertama

  3. MySQL Pilih Ini dan Itu

  4. Temukan dan hapus baris duplikat dengan dua kolom

  5. MySqlConnection.StateChange tidak pernah Mengambil