vendredi 23 septembre 2016

Proper way of handling scopes with pivot involved

As a laravel user for a couple of months now, I'm trying to better understand advanced use of Eloquent.

I ran into a case where I can't come up with a solution that feels right.

I've got the following structure (simplified)

Mandate
id
status_id

Mandate_user
mandat_id
user_id
link_status

User
id

I declared belongsToMany in both User and Mandat via the pivot table.

on User:

 public function mandates(){
        return belongsToMany(..)->withPivot('link_status');
    }

I'm able to get accepted mandates for a user by using

public function acceptedMandates(){
     return $this->mandates()->wherePivot('link_status', MandateUserStatus::Accepted);
}

This works but I'm wondering if there would be a better way by using scopes or other eloquent methods. And I'm trying to get accepted mandates that also have a status_id lower than 4 (which comes from an enum as well)

I thought of something like :

public function runningMandates(){
     return $this->acceptedMandates()->where('status_id','<', 4);
}

Then gathering mandates like so:

$mandates = User::find(1)->runningMandates();

But would the eloquent way be of doing something like:

$mandates = User::find(1)->mandates()->running()->accepted();

Thanks for your time.



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire