返回数组而不是对象laravel / javascript ajax调用

时间:2017-11-22 08:21:22

标签: javascript php laravel laravel-5 vuejs2

我正在创建一个前端Vue组件。为此我使用Laravel项目中的数据和数据库。我得到的问题是来自Laravel的方法(AJAX调用也是这样)返回一个很好的数组,而另一个方法只返回带有AJAX调用的对象(集合?)。我需要两个调用返回一个数组,因为我在我的组件中使用了一些数组函数。

我尝试过各种各样的事情,前端作为后端。我已尝试在后端让laravel返回一个数组,在前端我尝试将对象设置为数组。两者都没有成功。

我的JS代码(和AJAX调用)

    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();
    }

后端

//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

有人可以帮助我吗?所以我需要修复一个在Laravel方法中返回一个数组,或者像一个函数来将两个对象都推送到JavaScript中的数组。

修改

所以我尝试了一些东西并做了一些事情发生在我身上。当我dd($boats)时,它将返回一个集合。当我执行dd($boats->toArray)时,它返回一个数组。奇怪的是,它在AJAX调用中没有任何区别。所以$boats->toArray()仍然只返回对象,而不是数组中的对象。

我也尝试将对象推入数组中,但这也不起作用。它会将集合(作为对象)放入数组中。如何更改此对象将直接插入数组而不是作为对象的集合?

let arr = [];

arr.push(response.data);

console.log(arr);

1 个答案:

答案 0 :(得分:1)

我认为集合操作有问题,当你进行集合操作时,它会改变值。

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

  return $sorted->values(); 
}