mardi 11 décembre 2018

Laravel: create a fake belongsToMany withPivot relationship

I have a belongsToMany() relationship between a User and a Group. The user has a level within any group he belongs to.

public function groups()
{
    return $this->belongsToMany('App\Group', 'user_group', 'user_id', 'group_id')
                ->withPivot('level');
}

This works great.

However if the User is an admin, I would like the groups function to return ALL Groups with level = 3, regardless of whether that relationship exists in the pivot table or not.

I can successfully create a Collection which mirrors the data structure as follows:

    \App\Group::all()->transform(function ($item, $key) use ($uid) {
        $item->pivot = collect(['user_id'=>$uid,'group_id'=>$item->id,'level'=>3]);
        return $item;
    });

However, I cannot substitute the two outputs as one returns a belongsTo relationship instance and the other returns a Collection. This means I can call ->get() on the former but not the latter.

I thought about using the DB:: facade and creating a Builder for the latter, but I cannot add the Pivot values manually.

Any thoughts on how to achieve this?



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire