2017-09-14 3 views
0

Ich möchte eine Gruppe von abhängig von meinem benutzerdefinierten Zustand machen.Aber ich bin mir nicht sicher, ob mein Weg richtig ist oder nicht.Laravel groupBy funktioniert nicht richtig

Mein Code

$cderList = $cderListQuery->groupBy('cder_id') 
    ->groupBy('name') 
    ->groupBy(function ($query) { 
     if(!is_null($this->hp) || !is_null($this->hp)) 
     { 
      $query->groupBy('Value_Float'); 
     } 

    }) 
    ->orderBy('introduced', 'DESC') 
    ->limit(20) 
    ->get(); 

Fehlerdetails

strtolower() expects parameter 1 to be string, object given 
in Grammar.php (line 58) 

at HandleExceptions->handleError(2, 'strtolower() 
expects parameter 1 to be string, object given', 
'/home/vendor/laravel/ 
framework/src/Illuminate/Database/Grammar.php', 
58, array('value' => object(Closure), 'prefixAlias' => false)) 
+0

Welcher Fehler kommt zurück? – wbail

+0

Fehler Details Aktualisiert @wbail – testgo

+0

sieht aus wie Problem ist in dieser orderBy() -Klausel –

Antwort

0

Verwenden wenn Bedingte Klausel (Von Laravel Dokumentation) Ich denke, was yo Du willst nur 'Value_Float' bestellen, wenn eine Bedingung zutrifft

//Set the condition here 
$condition = !is_null($this->hp) || !is_null($this->hp); 

$cderList = $cderListQuery->groupBy('cder_id') 
    ->groupBy('name') 
    ->when($condition, function($query){ 
     //This segment will only run if condition is true 
     return $query->groupBy('Value_Float'); 
    }) 
    ->orderBy('introduced', 'DESC') 
    ->limit(20) 
    ->get(); 
2

Da orderBy Verschlüsse nicht gefällt, können Sie die Abfrage ein bisschen wie diese brechen:

$query = $cderListQuery->groupBy('cder_id') 
    ->groupBy('name'); 

if(!is_null($this->hp) || !is_null($this->hp)) 
{ 
    $query->groupBy('Value_Float'); 
} 

$cderList = $query->orderBy('introduced', 'DESC') 
    ->limit(20) 
    ->get(); 
Verwandte Themen