您可以向VLAN模型添加作用域:
public function scopeNotAssigned($query, $id)
{
return $query->whereNotIn(
'id',
User::where('network_id', $id)->select('vlan_id')->get()->pluck('vlan_id')->toArray()
);
}
那么假设你有一个网络:
$network = \App\Network::first();
您可以这样检索网络中未分配的VLAN:
$vlans = \App\Vlan::notAssigned($network->id)->get();
否则,您还可以在VLAN模型中添加与用户的关系:
public function user()
{
return $this->hasOne('App\User');
}
然后你可以用
whereDoesntHave
功能:
$vlans = Vlan::whereDoesntHave('users', function ($query) use ($network) {
return $query->where('network_id', $network->id);
})->get();