Relations

  • Has many

  • Belongs to

  • Has and belongs to many

  • Has one

  • Has parent / Has children

Has many

When using join, this will result in ... LEFT JOIN posts ON posts.user_id = users.id .... With lazy-loading, this will result in SELECT * FROM posts WHERE user_id = ?


// ...
use Vendor\Domain\Entity\Posts;
// ...

class Users extends Entity
{
    // ...
    public function posts()
    {
        return $this->hasMany(Posts::class)
            ->foreignKey('user_id');
    }
    // ...
}

Belongs to

When using join, this will result in ... LEFT JOIN groups ON groups.id = users.group_id .... With lazy-loading, this will result in SELECT * FROM groups WHERE id = ?


// ...
use Vendor\Domain\Entity\Groups;
// ...

class Users extends Entity
{
    // ...
    public function group()
    {
        return $this->belongsTo(Groups::class)
            ->foreignKey('group_id');
    }
    // ...
}

Has many and belongs to (MTM)

When using join, this will result in ... LEFT JOIN friends ON friends.user_id = users.id LEFT JOIN users AS users2 WHERE users2.id = friends.user2_id. With lazy-loading, this will result in SELECT * FROM friends WHERE user_id = ? AND SELECT * from users WHERE id = ?.


// ...
use Vendor\Domain\Entity\Friends;
// ...

class Users extends Entity
{
    // ...
    public function friends()
    {
        return $this->hasAndBelongsTo(Users::class)
            ->over(Friends::class)
            ->leftForeignKey('user_id')
            ->rightForeignKey('user2_id');
    }
    // ...
}

Has one

Has parent / Has children


class Users extends Entity
{
    // ...
    public function parent()
    {
        return $this->hasParent(Users::class)
            ->foreignKey('parent_id');
    }

    public function children()
    {
        return $this->hasChildren(Users::class)
            ->foreignKey('parent_id');
    }
    // ...
}

Morphed by

Morphs many

Last updated

Was this helpful?