Search code examples
phplaraveleloquentlaravel-4pivot-table

Where NOT in pivot table


In Laravel we can setup relationships like so:

class User {
    public function items()
    {
        return $this->belongsToMany('Item');
    }
}

Allowing us to to get all items in a pivot table for a user:

Auth::user()->items();

However what if I want to get the opposite of that. And get all items the user DOES NOT have yet. So NOT in the pivot table.

Is there a simple way to do this?


Solution

  • For simplicity and symmetry you could create a new method in the User model:

    // User model
    public function availableItems()
    {
        $ids = \DB::table('item_user')->where('user_id', '=', $this->id)->lists('user_id');
        return \Item::whereNotIn('id', $ids)->get();
    }
    

    To use call:

    Auth::user()->availableItems();