2016-03-22 24 views
0
<?php 

namespace App\Http\Controllers; 

use App\Clients; 
use Illuminate\Http\Request; 
use App\Http\Requests; 

class AuditsController extends Controller { 

    public function index() { 
     $clients = Clients::distinct()->select('tag')->where('tag', '!=', 'NA')->get(); 
     return view('clients', compact('clients')); 
    } 

    public function show($client) { 
     $machines = Clients::with('machines', 'bios')->where('TAG', $client)->get(); 
     $server = $machines->where('OSNAME', 'LIKE', '%server%')->get(); 

     return view('audit', compact('client'))->with('server', $server); 
    } 

} 

$ Maschinen verbinden erstellt eine Liste der Maschinen hat der Kunde, ich brauche diese Liste haben, nur mit dem Wort-Server auf dem Gebiet OSNAME die Maschinen zeigen, ive versucht, es zu tun, wie folgt, aber es hat auch funktioniert nichtLaravel eloquent Abfrage

Ich bin mir nicht sicher, was ist die richtige Laravel-Methode dafür, sollte ich ein neues Modell erstellen?

Clients/Maschinen verweisen auf 2 verschiedene Tabellen in DB.

Antwort

1

Verwendung Eager-Loading Filter:

Bevor:

public function show($client) { 
    $machines = Clients::with('machines', 'bios')->where('TAG', $client)->get(); 
    $server = $machines->where('OSNAME', 'LIKE', '%server%')->get(); 

    return view('audit', compact('client'))->with('server', $server); 
} 

Nach:

public function show($client) { 
    $machines = Clients::with(['machines' => function($query) { 
     //Filter eager loaded relation 
     return $query->where('OSNAME', 'LIKE', '%server%'); 
    }, 'bios'])->where('TAG', $client)->get(); 

    return view('audit', compact('client'))->with('machines', $machines); 
} 

See: https://laravel.com/docs/5.1/eloquent-relationships#constraining-eager-loads

Der richtige Weg (Vermeidet unnötige Anfragen):

public function show($client) { 
    //Proper way to do it 
    $server = Machine::whereHas('client',function($query) use ($client){ 
     return $query->where('TAG', $client) 
    })->where('OSNAME', 'LIKE', '%server%')->get(); 

    return view('audit', compact('client'))->with('server', $server); 
} 
+0

Dank genau das, was ich brauchte, – dev7