'device_id', 'port' => 'port_id', 'untagged', 'state' => 'ports_vlans.state', 'cost' => 'ports_vlans.cost', ]; } private int $vlanId; protected function baseQuery(Request $request): Builder { $this->validate($request, ['vlan' => 'integer']); $this->vlanId = $request->get('vlan', 1); return Port::with('device') ->leftJoin('ports_vlans', 'ports.port_id', 'ports_vlans.port_id') ->where(function ($query) { $query->where('ifVlan', $this->vlanId) ->orWhere('ports_vlans.vlan', $this->vlanId); }) ->select([ 'ports.port_id', 'ports.device_id', 'ports.ifName', 'ports.ifIndex', 'ports.ifDescr', 'ports.ifAlias', 'ports.ifVlan', 'ports.ifAdminStatus', 'ports.ifOperStatus', 'ports_vlans.untagged', 'ports_vlans.state', 'ports_vlans.cost', DB::raw("CASE WHEN ports.ifVlan = $this->vlanId or ports_vlans.untagged <> 0 THEN \"yes\" ELSE \"no\" END as untagged"), ]); } /** * @param Port $model */ public function formatItem($model): array { return [ 'device' => Url::deviceLink($model->device), 'port' => Url::portLink($model), // left joined columns 'untagged' => $model['untagged'], 'state' => $model['state'], 'cost' => $model['cost'], ]; } }