2017-11-22 1 views
0

Ich erstelle eine Front-End-Vue-Komponente. Dazu benutze ich Daten und eine Datenbank aus einem Laravel-Projekt. Das Problem, das ich bekam, ist, dass eine Methode von Laravel (und so der AJAX-Aufruf) ein Array zurückgibt, was gut ist, und die andere Methode nur die Objekte (Sammlung?) Mit dem AJAX-Aufruf zurückgibt. Ich brauche beide Aufrufe, die ein Array zurückgeben, weil ich einige Array-Funktionen in meiner Komponente verwende.Rückgabe Array anstelle von Objekten Laravel/Javascript Ajax Anruf

Ich habe alle möglichen Dinge ausprobiert, sowohl im Frontend als auch im Backend. Ich habe versucht, im Backend Laravel ein Array zurückgeben und auf der Front-End habe ich versucht, die Objekte zu einem Array zu setzen. Beides war nicht erfolgreich.

Mein JS Code (und AJAX-Aufrufe)

methods: { 

     countAllItems() { 
      this.countItems = this.items.length; 
     }, 

     getUrl(items) { 

      let results = items; 

      results.forEach((item) => { 

       let id = item.id; 

       return item.url = `/advertisements/show/${id}`; 
      }); 

     }, 

     getMax(items) { 

      let boats = items.slice(0, 4); 

      this.items = boats; 

      this.getUrl(this.items); 
      this.countAllItems(); 

     }, 

     getBoats() { 

      axios.get('/api/boats') 
       .then((response) => { 

        //this will return an array 
        console.log(response.data); 
        this.items = response.data; 

        this.countAllItems(); 
        this.getMax(this.items); 




       }) 
       .catch((error) => console.log(error)); 

     }, 

     getReservations() { 

      axios.get('/api/popular') 
       .then((response) => { 

        //this will return objects, and must be an array 
        console.log(response.data); 
        this.items = response.data; 

        this.countAllItems(); 
        this.getMax(this.items); 

       }); 
     } 

    }, 

    created() { 
     this.getBoats(); 
     this.getReservations(); 
    } 

Die Back-End-

//This will return the array 
public function boats() { 

    return Boat::with('media')->get(); 

} 

//This will return objects 
public function messages() { 

    $boats = Boat::with('media')->get()->sortByDesc(function($boat) { 
     return count($boat->conversations); 
    }); 

    return $boats; 

} 

console.logs

Gibt es jemanden, der mir helfen kann? Also brauche ich entweder eine Korrektur für das Zurückgeben eines Arrays in der Laravel-Methode oder etwas wie eine Funktion, um beide Objekte in ein Array in JavaScript zu schieben.

bearbeiten

Also habe ich versucht, einige Dinge und tun, dass etwas fiel mir ein. Wenn ich dd($boats) mache, wird eine Sammlung zurückgegeben. Wenn ich dd($boats->toArray) mache, gibt es ein Array zurück. Was das Seltsame ist, ist, dass es keinen Unterschied in den AJAX-Aufrufen macht. So $boats->toArray() wird immer noch nur die Objekte und nicht die Objekte in einem Array zurückgeben.

Ich habe auch versucht, die Objekte in einem Array zu schieben, aber das funktioniert auch nicht. Es wird die Sammlung (als ein Objekt) in ein Array platzieren. Wie kann ich das ändern, dass die Objekte direkt in das Array anstelle der Sammlung als Objekt eingefügt werden?

+0

verwenden toArray(); Funktion – CasperSL

+0

Gefällt mir 'return $ boats-> toArray();'? Weil ich das schon probiert habe und das nicht funktioniert. – Gijsberts

+0

ja, was ist die Ausgabe – CasperSL

Antwort

1

Ich denke, Problem mit Sammlung Manipulation, wenn Sie Sammlung Manipulation, ändert es die Werte.

public function messages() { 
    $boats = Boat::with('media')->get(); 
    $sorted = $boats->sortByDesc('do your sort here'); 

    return $sorted->values(); 
} 
Verwandte Themen