Laravel 5 / Vue JS:Get请求路由返回对象或数组取决于Eloquent查询

时间:2017-08-24 10:10:06

标签: javascript arrays laravel object vuejs2

我是Laravel 5.4和Vue js 2的新手,我遇到了这个我可以解决的问题。

我有一个带有2种方法的控制器(和相关的路线):

public function index()
{
    //
    return BookingPayment::all();
}

public function index_booking($id_booking)
{
    return BookingPayment::all()
        ->where('id_booking', '=', $id_booking)
        ->toArray(); // <<-- no effects !?
}

方法index返回表格中的所有行,index_booking执行过滤器id_booking字段。

在php我的PHP页面中,我有一个javascript,它在这两条路线上发出请求。 我的问题是当我使用index_booking时,请求返回一个Object。我期待一个数组,因为我将能够轻松地使用数组函数来操作结果。

这是我的javascript:

var vm = new Vue({

el: '#bookingpay',

data: function () {
    return {
        booking_id: 15,
        payments: [],
        input: [{id: 0, id_booking: 0, new_amount: 99}]
    }
},

mounted: function () {
    this.fetchPayment();
},

methods: {

    fetchPayment: function () {
        this.$http.get('/api/bookingpayments_bybooking/' + this.booking_id).then(function (response) {
            this.payments = response.data;
        })
    },

    delPayment: function (id, index) {
        this.$http.delete('/api/bookingpayments/' + id).then(function () {
            this.payments.splice(index, 1); // doesn't work on Ojbect
        })
    },

    addPayment: function () {
        this.$http.post('/api/bookingpayments', this.input).then(function () {
            this.payments.push(this.input);
        })
    },

}

});

这是我期望作为http查询响应的那种格式。这是我使用索引时所拥有的: [ { "id": 79, "id_booking": 3, "amount": "10.00" }, { "id": 80, "id_booking": 3, "amount": "10.00" },     ....

这是我使用index_booking时的内容: { "28": { "id": 29, "id_booking": 15, "amount": "45.00" }, "29": { "id": 30, "id_booking": 15, "amount": "48.00" } } 我被卡住了!任何帮助将非常感激。干杯

1 个答案:

答案 0 :(得分:0)

您的public function index_booking($id_booking) { // This will return a Collection that will be translated to an array/json when you hit the endpoint via ajax. There is no need for toArray(), though... return BookingPayment::where('id_booking', '=', $id_booking)->get(); } 错了。正确的方法是:

std::accumulate