2016-07-29 7 views
0

So habe ich eine & * ^% einer Zeit mit diesem. Ich habe etwas gegraben und ich kann einfach nicht den richtigen (oder möglichen) Weg finden, um das zu erreichen, wonach ich suche.Laravel Modell mit Append-Funktion und Weitergabe von Parametern

Ein bisschen Hintergrundgeschichte. Ich habe diese Abfrage geschrieben, um direkt in die nv3d-Grafikbibliothek zu integrieren, daher ist die Datenstruktur für mich ebenso wichtig wie das korrekte Festlegen des Datums.

Zuerst haben wir eine Modellabfrage für "Produkte", das schafft mir eine schöne geordnete Liste mit ID, Titel und Farbe.

Product::whereCuId(auth()->user()->cu_id) 
     ->whereCategoryId($id) 
     ->orderBy('sort_order', 'ASC') 
     ->select('id as id','title AS key', 'color AS color') 
     ->get(); 

Das gibt mir folgendes zurück.

{ 
"id": 1, 
"key": "Title 1", 
"color": "#ffbd13", 
} 
{ 
"id": 2, 
"key": "Title 2", 
"color": "#8f8f8f" 
} 
(etc) 

Schritt eins: Großartig!

Als nächstes im Produktmodell füge ich Daten/Werte zu jedem Produkt hinzu. Dies ist, wo das Problem besteht.

Wie ist es möglich, Parameter an diese sekundäre Abfrage wie eine Datumsanzahl, Reichweite, etc?

protected $appends = array('values'); 
    public function getValuesAttribute() { 
     return $values=Checkin::whereProductId($this->id) 
      ->groupBy('date') 
      ->orderBy('date', 'ASC') 
      ->whereRaw('Date(created_at) > CURDATE() - INTERVAL 21 day') 
      ->get(array(
       DB::raw('1000*UNIX_TIMESTAMP(Date(created_at)) as date'), 
       DB::raw('COUNT(id) as total') 
      )); 
    } 

Jetzt offensichtlich kann ich so etwas wie diese benutzen, die zur Zeit in der obigen Abfrage ist ....

->whereRaw('Date(created_at) > CURDATE() - INTERVAL 21 day') 

Aber wie ist es möglich, für mich Parameter aus dem ursprünglichen Controller passieren (die Anrufe das Produktmodell) in die Unterfunktion innerhalb des Modells und sage ... setze die obige "21" auf eine Variable, die ich übergebe?

Vielen Dank im Voraus für die Hilfe !!!

Dies ist das Endziel des Datenformats und wie es derzeit existiert (ohne in der Lage zu sein, die Anzahl der Tage zu ändern), nur als Beispiel.

{ 
"id": 1, 
"key": "Title 1", 
"color": "#ffbd13", 
"values": [ 
    { 
    "date": 1468047600000, 
    "total": 4 
    }, 
    { 
    "date": 1468134000000, 
    "total": 1 
    }, 
    { 
    "date": 1468220400000, 
    "total": 1 
    }, 
    { 
    "date": 1468306800000, 
    "total": 2 
    }] 
} 
{ 
"id": 2, 
"key": "Title 2", 
"color": "#8f8f8f" 
} 
(etc) 

Antwort

0

Ich denke, Sie suchen nach Schließung. Hat es nicht getestet, aber sollte man die Idee geben:

$yourVar = 21; 
$values=Checkin::whereProductId($this->id) 
     ->groupBy('date') 
     ->orderBy('date', 'ASC') 
     ->where(function ($query) use ($yourVar) { 
      $query->whereRaw('Date(created_at) > CURDATE() - INTERVAL '.$yourVar.' day')); 
     }) 
     ->get(array(
      DB::raw('1000*UNIX_TIMESTAMP(Date(created_at)) as date'), 
      DB::raw('COUNT(id) as total') 
     )); 
+0

Ich verstehe immer noch nicht, wie ich diesen Wert von 21 passieren kann (oder einen beliebigen Wert) aus dem vorherigen Produkt :: Abfrage durch auf diese spezifische Funktion Das ist mein wirkliches Problem hier. Trotzdem danke! –

Verwandte Themen