コード例 #1
0
ファイル: DbHelperTest.php プロジェクト: fproject/yii2-common
 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);
 }