コード例 #1
0
 public function testViaOrder()
 {
     $firstProject = new Project();
     $firstProject->name = 'Building';
     $firstProject->save();
     $secondProject = new Project();
     $secondProject->name = 'Logistic';
     $secondProject->save();
     $firstWorker = new Worker();
     $firstWorker->name = 'Mark';
     $firstWorker->save();
     $secondWorker = new Worker();
     $secondWorker->name = 'Alex';
     $secondWorker->save();
     ProjectMembership::objects()->getOrCreate(['project' => $firstProject, 'worker' => $firstWorker, 'position' => 1, 'curator' => $secondWorker]);
     ProjectMembership::objects()->getOrCreate(['project' => $firstProject, 'worker' => $secondWorker, 'position' => 2, 'curator' => $firstWorker]);
     $this->assertEquals([['id' => '1', 'project_id' => '1', 'worker_id' => '1', 'position' => '1', 'curator_id' => '2'], ['id' => '2', 'project_id' => '1', 'worker_id' => '2', 'position' => '2', 'curator_id' => '1']], ProjectMembership::objects()->asArray()->all());
     $this->assertEquals([['id' => '1', 'name' => 'Mark'], ['id' => '2', 'name' => 'Alex']], Worker::objects()->filter(['projects__id__in' => [$firstProject->id]])->order(['projects_through__position'])->asArray()->all());
     $this->assertEquals([['id' => '2', 'name' => 'Alex'], ['id' => '1', 'name' => 'Mark']], Worker::objects()->filter(['projects__id__in' => [$firstProject->id]])->order(['-projects_through__position'])->asArray()->all());
     $this->assertEquals([['id' => '1', 'name' => 'Mark'], ['id' => '2', 'name' => 'Alex']], Worker::objects()->order(['projects_through__position'])->asArray()->all());
     $this->assertEquals([['id' => '2', 'name' => 'Alex'], ['id' => '1', 'name' => 'Mark']], Worker::objects()->order(['-projects_through__position'])->asArray()->all());
     $this->assertEquals([['id' => '2', 'name' => 'Alex']], Worker::objects()->filter(['projects_through__curator' => $firstWorker])->asArray()->all());
     $this->assertEquals([['id' => '1', 'name' => 'Mark']], Worker::objects()->filter(['projects_through__curator' => $secondWorker])->asArray()->all());
     $this->assertEquals("SELECT `tests_worker_1`.* FROM `tests_worker` `tests_worker_1` LEFT OUTER JOIN `tests_project_membership` `tests_project_membership_2` ON `tests_worker_1`.`id` = `tests_project_membership_2`.`worker_id` LEFT OUTER JOIN `tests_project` `tests_project_3` ON `tests_project_membership_2`.`project_id` = `tests_project_3`.`id` WHERE (`tests_project_membership_2`.`curator_id`='2') GROUP BY `tests_worker_1`.`id`", Worker::objects()->filter(['projects_through__curator' => $secondWorker])->allSql());
     $this->assertEquals("SELECT `tests_worker_1`.* FROM `tests_worker` `tests_worker_1` LEFT OUTER JOIN `tests_project_membership` `tests_project_membership_2` ON `tests_worker_1`.`id` = `tests_project_membership_2`.`worker_id` LEFT OUTER JOIN `tests_project` `tests_project_3` ON `tests_project_membership_2`.`project_id` = `tests_project_3`.`id` GROUP BY `tests_worker_1`.`id` ORDER BY `tests_project_membership_2`.`position`", Worker::objects()->order(['projects_through__position'])->asArray()->allSql());
     $this->assertEquals("SELECT `tests_worker_1`.* FROM `tests_worker` `tests_worker_1` LEFT OUTER JOIN `tests_project_membership` `tests_project_membership_2` ON `tests_worker_1`.`id` = `tests_project_membership_2`.`worker_id` LEFT OUTER JOIN `tests_project` `tests_project_3` ON `tests_project_membership_2`.`project_id` = `tests_project_3`.`id` WHERE (`tests_project_3`.`id` IN ('1', '2')) GROUP BY `tests_worker_1`.`id` ORDER BY `tests_project_membership_2`.`position` DESC", Worker::objects()->filter(['projects__id__in' => [$firstProject->id, $secondProject->id]])->order(['-projects_through__position'])->allSql());
 }
 public function testSaveMixedRelationsShouldSucceed()
 {
     $project = new Project();
     $project->name = "New project";
     $project->company = Company::findOne(2);
     $users = User::findAll([1, 3]);
     $this->assertCount(0, $project->users, 'Project should have 0 users before save');
     $project->users = $users;
     // Add users
     $this->assertEquals(2, count($project->users), 'Project should have 2 users after assignment');
     $this->assertTrue($project->save(), 'Project could not be saved');
     $this->assertCount(2, $project->users, 'Project should have 2 users after save');
     $this->assertEquals(2, $project->company_id, 'Company ID is not the one expected');
 }