PHPackages                             mtchabok/objects\_relation - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. mtchabok/objects\_relation

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

mtchabok/objects\_relation
==========================

PHP Objects Relation

0.1.0(6y ago)08MITPHPPHP &gt;=7.0

Since Jun 7Pushed 6y agoCompare

[ Source](https://github.com/mtchabok/objects_relation)[ Packagist](https://packagist.org/packages/mtchabok/objects_relation)[ RSS](/packages/mtchabok-objects-relation/feed)WikiDiscussions v0.1.0 Synced 2mo ago

READMEChangelog (1)DependenciesVersions (3)Used By (0)

PHP Objects Relation
====================

[](#php-objects-relation)

PHP Objects Relation for control relations between objects.

Installation
------------

[](#installation)

This package is listed on [Packagist](https://packagist.org/packages/mtchabok/objects_relation).

```
composer require mtchabok/objects_relation

```

How To Usage
------------

[](#how-to-usage)

#### Create Relation Class

[](#create-relation-class)

```
use \Mtchabok\ObjectsRelation\Relation;
class myObjectUseTraitClass{
    use Relation;

    public $name = '';

    public function __construct()
    {
        $this->addRelationType('parent', 'child');
        $this->addRelationType('child', 'parent');
    }
}
```

OR

```
use \Mtchabok\ObjectsRelation\RelationObject;
class myObjectExtendsClass extends RelationObject{
    public $name = '';

    public function __construct()
    {
        $this->addRelationType('parent', 'child');
        $this->addRelationType('child', 'parent');
    }
}
```

OR

```
use \Mtchabok\ObjectsRelation\Relation;
use \Mtchabok\ObjectsRelation\RelationChild;
use \Mtchabok\ObjectsRelation\RelationParent;
class myObjectParentChildTraitClass{
    use Relation;
	use RelationParent{ RelationParent::__construct as __parentConstruct; }
	use RelationChild{ RelationChild::__construct as __childConstruct; }

    public $name = '';

    public function __construct()
    {
        $this->__parentConstruct();
        $this->__childConstruct();
    }
}
```

#### How Used Relation Object`s

[](#how-used-relation-objects)

```
$ObjectUseTraitClass1 = new myObjectUseTraitClass();
$ObjectUseTraitClass2 = new myObjectExtendsClass();

$ObjectUseTraitClass1->name = 'Cambyses';
$ObjectUseTraitClass2->name = 'Cyrus';

$ObjectUseTraitClass1->addRelation($ObjectUseTraitClass2, 'child');

echo "{$ObjectUseTraitClass2->name} (parent: {$ObjectUseTraitClass2->getRelation('', 'parent')->name})"; // print Cyrus (parent: Cambyses)
echo PHP_EOL;
echo "{$ObjectUseTraitClass1->name} (child: {$ObjectUseTraitClass1->getRelation('', 'child')->name})"; // print Cambyses (child: Cyrus)
```

OR

```
$ObjectUseTraitClass1 = new myObjectParentChildTraitClass();
$ObjectUseTraitClass2 = new myObjectParentChildTraitClass();

$ObjectUseTraitClass1->name = 'Cambyses';
$ObjectUseTraitClass2->name = 'Cyrus';

$ObjectUseTraitClass1->setChild($ObjectUseTraitClass2);

echo "{$ObjectUseTraitClass2->name} (parent: {$ObjectUseTraitClass2->getParent()->name})"; // print Cyrus (parent: Cambyses)
echo PHP_EOL;
echo "{$ObjectUseTraitClass1->name} (child: {$ObjectUseTraitClass1->getChild()->name})"; // print Cambyses (child: Cyrus)
```

#### Professional Used Relation Object`s

[](#professional-used-relation-objects)

This code sample is The Cyrus the Great Family

```
use \Mtchabok\ObjectsRelation\Relation;

class myObjectFamily{
	use Relation;

	public $sex = '';
	public $name = '';

	public function __construct($name, $sex)
	{
		$this->addRelationType(['father','mother','husband','wife','son','daughter'], [$this, '_relationReturnType']);
		$this->name = $name;
		$this->sex = $sex;
	}

	protected function _relationReturnType($type, $relation)
	{
		switch ($type){
			case 'father': case 'mother':
				return $relation->sex=='male' ?'son' :'daughter';
				break;
			case 'son':case 'daughter':
				return $this->sex=='male' ?'father' :'mother';
				break;
			case 'husband':
				return 'wife';
				break;
			case 'wife':
				return 'husband';
				break;
		}
		return '';
	}
}

$Cambyses1  = new myObjectFamily('Cambyses1', 'male');
$Mandane    = new myObjectFamily('Mandane', 'female');
$Cyrus      = new myObjectFamily('Cyrus', 'male');
$Cassandane = new myObjectFamily('Cassandane', 'female');
$Cambyses2  = new myObjectFamily('Cambyses2', 'male');
$Atossa     = new myObjectFamily('Atossa', 'female');
$Bardiya    = new myObjectFamily('Bardiya', 'male');
$Roksana    = new myObjectFamily('Roksana', 'female');

// add $Mandane by type(wife) into $Cambyses1
$Cambyses1->addRelation($Mandane, 'wife');
// add $Cyrus by type(son) into $Cambyses1
$Cambyses1->addRelation($Cyrus, 'son');

// add $Cyrus by type(son) into $Mandane
$Mandane->addRelation($Cyrus, 'son');

// add $Cassandane by type(wife) into $Cyrus
$Cyrus->addRelation($Cassandane, 'wife');
// add $Cambyses2 and $Bardiya by type(son) into $Cyrus
$Cyrus->addRelation([$Cambyses2, $Bardiya], 'son');
// add $Atossa and $Roksana by type(daughter) into $Cyrus
$Cyrus->addRelation([$Atossa, $Roksana], 'daughter');

// add $Cambyses2 and $Bardiya by type(son) into $Cassandane
$Cassandane->addRelation([$Cambyses2, $Bardiya], 'son');
// add $Atossa and $Roksana by type(daughter) into $Cassandane
$Cassandane->addRelation([$Atossa, $Roksana], 'daughter');

echo "Cyrus (father: {$Cyrus->getRelation('', 'father')->name}, mother: {$Cyrus->getRelation('', 'mother')->name})".PHP_EOL; // print Cyrus (father: Cambyses1, mother: Mandane)
echo "Cyrus wife: {$Cyrus->getRelation('', 'wife')->name}".PHP_EOL; // print Cyrus wife: Cassandane
echo 'Cyrus childes:';
foreach ($Cyrus->getRelations(['daughter','son']) as $child)
	echo " $child->name,";
echo PHP_EOL; // print Cyrus childes: Atossa, Roksana, Cambyses2, Bardiya,
```

#### For More Usage Documentation, Use This Relation Library By IDE

[](#for-more-usage-documentation-use-this-relation-library-by-ide)

###  Health Score

21

—

LowBetter than 19% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity4

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity45

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

2534d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/4ffa7dd709b65d7cb654af598deedb150bbf8075c70a6bdce2ddc4e3d278c644?d=identicon)[mtchabok](/maintainers/mtchabok)

---

Top Contributors

[![mtchabok](https://avatars.githubusercontent.com/u/27890892?v=4)](https://github.com/mtchabok "mtchabok (7 commits)")

---

Tags

PHP Objects Relation

### Embed Badge

![Health badge](/badges/mtchabok-objects-relation/health.svg)

```
[![Health](https://phpackages.com/badges/mtchabok-objects-relation/health.svg)](https://phpackages.com/packages/mtchabok-objects-relation)
```

###  Alternatives

[willvincent/laravel-rateable

Allows multiple models to be rated with a fivestar like system.

416452.0k3](/packages/willvincent-laravel-rateable)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
