public function test_adding_a_relationship_to_resource() { $rootResource = new Resource('my__0', 'myCoolResource', 'my_cool_table', 'my_cool_id'); $referencedResource = new Resource('my__1', 'myOtherResource', 'my_other_table', 'my_cool_id'); $relationship = new Relationship($rootResource, $referencedResource, 'many-to-one', 'my_other_table.cool_id = my_cool_table.id'); $rootResource->addRelationship($relationship); $this->assertTrue($rootResource->hasRelationships()); $this->assertEquals(1, $rootResource->countRelationships()); }
private function buildFromJoinsClause(Resource $resource) { $joinsClause = ''; if ($resource->hasRelationships()) { $relationships = $resource->getRelationships(); /** @var \FlyRRM\Mapping\Relationship $rel */ foreach ($relationships as $rel) { if ($rel->getType() === Relationship::TYPE_MANY_TO_ONE) { $referencedResource = $rel->getReferencedResource(); $mainResource = $rel->getMainResource(); $joinCondition = $mainResource->getResourceUniqueIdentifier() . '.' . $rel->getJoinColumn() . ' = ' . $referencedResource->getResourceUniqueIdentifier() . '.' . $referencedResource->getPrimaryKey(); $joinsClause .= ' left outer join ' . $referencedResource->getTable() . ' ' . $referencedResource->getResourceUniqueIdentifier() . ' on ' . $joinCondition . $this->buildFromJoinsClause($referencedResource); } } } return $joinsClause; }