2017-06-10 1 views
0

Ist in Laravel möglich, wo Zustand zu einer Sammlung und das Ergebnis davon in eine andere Sammlung ohne Änderung der ersten gelegt?Laravel Kollektion where Klausel

Ex:

$documenti = DB::table("RVW_DocumentiDettaglio") 
       ->select("*") 
       ->where("IDAzienda", "=", $request->session()->get("operatore.IDAzienda")) 
       ->whereIn("CodiceStato", [Documento::E_DOC, Documento::W_DOC, Documento::OK_DOC]) 
       ->orderBy("IDDocumentoTestata", "asc"); 

// Ciclo le voci spesa 
foreach ($voci_spesa as $voce_spesa) { 
    Log_Controller::debug("Documenti:" . $documenti->get()); 

    if ($voce_spesa["Manuale"]) { 
     $dettaglio = $documenti->where("Descrizione", "like", "%" . $voce_spesa["Descrizione"] . "%"); 
    } else { 
     $dettaglio = $documenti->where("Descrizione", "=", $voce_spesa["Descrizione"]); 
    } 
    Log_Controller::debug("Dettaglio:" . $dettaglio->get()); 
} 
die; 

Mit $documenti ich die ersten Sammlung zu erhalten, in der foreach beantrage ich die, wo Zustand und das Ergebnis zu $dettaglio Sammlung, aber die erste ($documenti) wurde ebenfalls geändert. Warum? Es ist wie geteiltes Objekt

Antwort

1

Sie können sicherlich Wo Sätze auf Sammlungen zusammen mit einer guten Anzahl von anderen Methoden einschließlich Filterung und Zuordnung anwenden. Lesen Sie die Dokumentation hier:

Collections where clauses

$collection = Item::all(); 

$filtered = $collection->where('price', 100); 

$filtered->all(); 
+0

Ok, so muss zuerst muss ich verwenden -> get() Methode Sammlung zu extrahieren, und dann kann ich an die erste Kollektion arbeiten, ohne ihre des Elements ändern, auch wenn ich Condition darauf anwenden? Aber was ist das anders, wenn ich wo condiction nach oder vor get() Methode verwende? Die Leistung ist die gleiche? – Mintendo

+0

Ja, Sie können eine separate Collection-Instanz erhalten, die von diesen Methoden zurückgegeben wird, wobei das Original intakt bleibt. Wenn Sie nach -> get() nur eine Sache für die Sammlung tun, würde ich sagen, dass Sie das where() in die DB-Abfrage einschließen. – btl

+0

Nicht, nachdem ich andere Dinge getan habe und all das unter foreach loop, also muss ich für jede Schleife ein "Duplikat" der ersten Sammlung erstellen – Mintendo