How to specify Laravel relationships based on two (or more) columns (composite keys)

In Laravel Eloquent ORM, there is no way to define a relationship from one model to another by matching more than one column.

For instance, if you want to do something as the below with eager loading, the $this->blog_id will be null while processing

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    public function posts()
    {
        //WON'T WORK WITH EAGER LOADING!!!
        return $this->hasMany(Post::class)->where('blog_id', $this->blog_id);
    }
}

I faced this problem and tried many approaches and it would not work till I found the package that works perfectly for me.

you can check the package out with the below link.

https://github.com/topclaudy/compoships

There is no need to duplicate how to use the package here cos the package docs are explanatory enough.

0
Subscribe to my newsletter

Read articles from Babatunde Daramola directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Babatunde Daramola
Babatunde Daramola

Over a decade in web development | PHP | Laravel | Js | Vue | React | nodejs | Educator. More = https://linktr.ee/ritechoice23