Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách đặt giá trị nhiều lựa chọn từ đối tượng mảng trong yii2 khi cập nhật

Đây là mã ví dụ của lớp mô hình Permit có một many to many mối quan hệ với Activity thông qua PermitActivity (mô hình bảng tổng hợp).

Hoạt động của lớp người mẫu

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

Bằng cách này, lớp mô hình là lớp chịu trách nhiệm tạo và cập nhật mối quan hệ bằng cách sử dụng bảng tổng hợp.

Điều quan trọng nhất là phải khai báo đúng phương thức quan hệ.

Chỉnh sửa

Đây là ví dụ về chế độ xem sử dụng kartikv\widgets\Select2 . Tôi thực sự không biết dropDownList có hỗ trợ nhiều lựa chọn hay không, tuy nhiên Select2 có rất nhiều tính năng hữu ích mà tôi thường sử dụng nó hơn các tùy chọn khác.

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. Mysql Thứ tự theo họ khi tên đầy đủ cho cột

  2. Hive 2.1.1 MetaException (thông báo:Không tìm thấy thông tin phiên bản trong hệ thống di căn.)

  3. Trường bảng có thể chứa dấu gạch nối không?

  4. Bản sao liên quan đến SUM, LEFT JOIN và GROUP BY

  5. Lỗi nghiêm trọng khi gọi hàm được lưu trữ MySQL từ PHP bằng MySQLi