public function up()
 {
     $this->createTable('user_profile', ['id' => 'pk', 'email' => Schema::TYPE_STRING, 'phone' => Schema::TYPE_STRING]);
     $this->createTable('department', ['id' => 'pk', 'name' => Schema::TYPE_STRING]);
     $this->createTable('user', ['id' => 'pk', 'profileId' => "int(11)", 'departmentId' => "int(11)", 'username' => Schema::TYPE_STRING . ' NOT NULL', 'password' => Schema::TYPE_STRING . ' NOT NULL', 'authKey' => Schema::TYPE_STRING, 'accessToken' => Schema::TYPE_STRING]);
     $this->createTable('user_department_assignment', ['userId' => "int(11)", 'departmentId' => "int(11)"]);
     $this->addPrimaryKey('pk_user_department_assignment', 'user_department_assignment', ['userId', 'departmentId']);
     $this->addForeignKey('fk_user_profile', 'user', 'profileId', 'user_profile', 'id');
     $this->addForeignKey('fk_user_department', 'user', 'departmentId', 'department', 'id');
     $this->addForeignKey('fk_department_assignment_user', 'user_department_assignment', 'userId', 'user', 'id');
     $this->addForeignKey('fk_department_assignment_department', 'user_department_assignment', 'departmentId', 'department', 'id');
     $data = [];
     for ($i = 0; $i < 100; $i++) {
         $data[] = ['name' => 'Department No.' . $i];
     }
     DbHelper::insertMultiple('department', $data);
     $this->insert('user_profile', ['id' => 1, 'email' => '*****@*****.**', 'phone' => '0123456789']);
     $this->insert('user_profile', ['id' => 2, 'email' => '*****@*****.**', 'phone' => '9876543210']);
     $data = [];
     for ($i = 0; $i < 1000; $i++) {
         $data[] = ['email' => "user_{$i}@fproject.net", 'phone' => '0123456789'];
     }
     DbHelper::insertMultiple('user_profile', $data);
     $this->insert('user', ['profileId' => 1, 'username' => 'admin', 'password' => 'admin', 'authKey' => 'test100key', 'accessToken' => '100-token']);
     $this->insert('user', ['profileId' => 2, 'username' => 'demo', 'password' => 'demo', 'authKey' => 'test101key', 'accessToken' => '101-token']);
     $data = [];
     for ($i = 0; $i < 500; $i++) {
         $data[] = ['profileId' => $i + 3, 'departmentId' => 1 + $i % 100, 'username' => 'demo_no_' . $i, 'password' => 'demo_no_' . $i, 'authKey' => "test_{$i} _key", 'accessToken' => 'test_$i _token'];
     }
     DbHelper::insertMultiple('user', $data);
 }
 /**
  * Delete a list of models according to the primary key values.
  * @return int the number of deleted models
  */
 public function run()
 {
     $ids = Yii::$app->getRequest()->getBodyParams();
     /* @var $modelCls ActiveRecord */
     $modelCls = new $this->modelClass();
     if ($this->checkAccess) {
         call_user_func($this->checkAccess, $this->id, $modelCls);
     }
     $pks = $modelCls::primaryKey();
     $cnt = count($pks);
     if ($cnt > 1 || $cnt == 0) {
         return DbHelper::batchDelete($modelCls::tableName(), $ids);
     } else {
         $condition = [];
         $condition[$pks[0]] = $ids;
         return $modelCls::deleteAll($condition);
     }
 }
Example #3
0
 /**
  * Saves or updates a model according to the primary key values.
  * @return \yii\db\ActiveRecordInterface the model being updated
  * @throws ServerErrorHttpException
  * @throws \yii\base\InvalidConfigException
  */
 public function run()
 {
     $modelArr = Yii::$app->getRequest()->getBodyParams();
     $models = [];
     foreach ($modelArr as $m) {
         /* @var $model ActiveRecord */
         $model = new $this->modelClass(['scenario' => $this->scenario]);
         if (!$this->loadModel($model, $m)) {
             throw new ServerErrorHttpException('Failed to batch-save the models: invalid data');
         }
         if (array_key_exists("_isInserting", $m) && $model->hasProperty("_isInserting")) {
             $model->{"_isInserting"} = $m["_isInserting"];
         }
         $models[] = $model;
     }
     if ($this->checkAccess) {
         call_user_func($this->checkAccess, $this->id, $models);
     }
     $attributes = $this->getSavingFieldsFromRequest();
     if (is_null($attributes)) {
         $attributes = [];
     }
     return DbHelper::batchSave($models, $attributes);
 }
Example #4
0
 public function testBatchSaveForUpdatableKeyModel()
 {
     /** @var User[] $inputModels */
     $inputModels = [];
     for ($i = 0; $i < 4; $i++) {
         $m = $inputModels[] = new User();
         $m->username = "******" . rand(10000, 99999);
         $m->password = $m->username;
     }
     /** @var User[] $savedReturn */
     $savedReturn = [];
     DbHelper::batchSave($inputModels, [], DbHelper::SAVE_MODE_AUTO, $savedReturn);
     /** @var User[] $savedUsers */
     $savedUsers = $savedReturn['inserted'];
     $department = new Department();
     $department->name = "Department testBatchSaveForUpdatableKeyModel";
     $department1 = new Department();
     $department1->name = "Department testBatchSaveForUpdatableKeyModel";
     $departmentSavedReturn = [];
     DbHelper::batchSave([$department, $department1], [], DbHelper::SAVE_MODE_AUTO, $departmentSavedReturn);
     /** @var Department $department */
     $department = $departmentSavedReturn['inserted'][0];
     /** @var Department $department1 */
     $department1 = $departmentSavedReturn['inserted'][1];
     /** @var UserDepartmentAssignment[] $inputModels */
     $inputModels = [];
     $ids = [];
     $sql = '';
     for ($i = 0; $i < 3; $i++) {
         $savedUser = $savedUsers[$i];
         $m = $inputModels[] = new UserDepartmentAssignment();
         $m->userId = $savedUser->id;
         $m->departmentId = $department->id;
         $ids[] = ['userId' => $savedUser->id, 'departmentId' => $department->id];
         if ($sql != '') {
             $sql = $sql . ' OR ';
         }
         $sql = $sql . "(`userId`={$savedUser->id} AND `departmentId`={$department->id})";
     }
     DbHelper::batchSave($inputModels);
     $sql = 'SELECT * FROM ' . UserDepartmentAssignment::tableName() . ' WHERE ' . $sql;
     /** @var UserDepartmentAssignment[] $savedAssignments */
     $savedAssignments = UserDepartmentAssignment::findBySql($sql)->all();
     $this->assertEquals(3, count($savedAssignments));
     $savedAssignments[0]->departmentId = $department1->id;
     $savedAssignments[1]->departmentId = $department1->id;
     $savedAssignments[2]->departmentId = $department1->id;
     $savedAssignments[2]->userId = $savedUsers[3]->id;
     DbHelper::batchSave($savedAssignments);
     $sql1 = '';
     foreach ($savedAssignments as $savedAssignment) {
         if ($sql1 != '') {
             $sql1 = $sql1 . ' OR ';
         }
         $sql1 = $sql1 . "(`userId`={$savedAssignment->userId} AND `departmentId`={$savedAssignment->departmentId})";
     }
     $sql1 = 'SELECT * FROM ' . UserDepartmentAssignment::tableName() . ' WHERE ' . $sql1;
     $return = UserDepartmentAssignment::findBySql($sql1)->count();
     $this->assertEquals(3, $return);
     $return = UserDepartmentAssignment::findBySql($sql)->count();
     $this->assertEquals(0, $return);
 }